如何在fish shell中将$argv转换为单个字符串

ggazkfy8  于 2023-02-13  发布在  Shell
关注(0)|答案(1)|浏览(125)

我正在编写一个fish函数,使用yt-dlpmpv将搜索项的第一个结果作为音频播放,问题是我需要搜索项作为单个字符串,而$argv是一个字符串数组,如何在fish中将字符串数组转换为单个字符串?
示例代码:

function ytaudio
    yt-dlp -f 251 -x ytsearch:$argv -o /tmp/yt-audio.opus
    mpv /tmp/yt-audio.opus
    rm /tmp/yt-audio.opus
end
egdjgwm8

egdjgwm81#

有几种方法可以实现这一点。
1.最简单的解决方案是使用单个参数调用函数,也就是将搜索项括在双引号内。

# Instead of 
$ ytaudio unity fat rat
# Use
$ ytaudio "unity fat rat"

这个解决方案的问题是,每次调用函数时,我们都必须输入引号来括住搜索项,这看起来不多,但如果函数被调用很多次,这就很烦人了。
1.在函数中用引号将$argv括起来。将函数的第一行更改为下一行。

yt-dlp -f 251 -x ytsearch:"$argv" -o /tmp/yt-audio.opus

1.使用fish的string collect。用下面的行替换函数的第一行。

set search (echo $argv | string collect)
yt-dlp -f 251 -x ytsearch:$search -o /tmp/yt-audio.opus

1.使用fish的string join(感谢@glennjackman)。Fish有一个简单而又令人敬畏的方法来连接字符串。用下面的两行替换函数的第一行。

set search (echo $argv | string join " ")
yt-dlp -f 251 -x ytsearch:$search -o /tmp/yt-audio.opus

string join " "表示用空格字符连接字符串。
在第二、第三和第四种解决方案中,可以在没有搜索项的引号的情况下调用函数

ytaudio unity fat rat

相关问题