我正在编写一个fish函数,使用yt-dlp和mpv将搜索项的第一个结果作为音频播放,问题是我需要搜索项作为单个字符串,而$argv是一个字符串数组,如何在fish中将字符串数组转换为单个字符串?示例代码:
fish
yt-dlp
mpv
$argv
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
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。用下面的行替换函数的第一行。
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有一个简单而又令人敬畏的方法来连接字符串。用下面的两行替换函数的第一行。
string join
set search (echo $argv | string join " ") yt-dlp -f 251 -x ytsearch:$search -o /tmp/yt-audio.opus
string join " "表示用空格字符连接字符串。在第二、第三和第四种解决方案中,可以在没有搜索项的引号的情况下调用函数
string join " "
ytaudio unity fat rat
1条答案
按热度按时间egdjgwm81#
有几种方法可以实现这一点。
1.最简单的解决方案是使用单个参数调用函数,也就是将搜索项括在双引号内。
这个解决方案的问题是,每次调用函数时,我们都必须输入引号来括住搜索项,这看起来不多,但如果函数被调用很多次,这就很烦人了。
1.在函数中用引号将
$argv
括起来。将函数的第一行更改为下一行。1.使用fish的
string collect
。用下面的行替换函数的第一行。1.使用fish的
string join
(感谢@glennjackman)。Fish有一个简单而又令人敬畏的方法来连接字符串。用下面的两行替换函数的第一行。string join " "
表示用空格字符连接字符串。在第二、第三和第四种解决方案中,可以在没有搜索项的引号的情况下调用函数