my-fish-script a b c d
Run Code Online (Sandbox Code Playgroud)
假设您想从第二个参数开始获取所有参数,那么b c d.
在bash中,您可以使用shift转储第一个参数并访问其余参数"$@".
你会如何使用鱼壳解决问题?
Den*_*nis 52
在fish中,您的参数包含在$argv列表中.使用列表切片来访问一系列元素,例如,$argv[2..-1]从第二个到最后一个返回所有参数.
例如
function loop --description "loop <count> <command>"
for i in (seq 1 $argv[1])
eval $argv[2..-1]
end
end
Run Code Online (Sandbox Code Playgroud)
用法
$ loop 3 echo hello world
hello world
hello world
hello world
Run Code Online (Sandbox Code Playgroud)
Den*_*nis 22
shift可以使用模拟命令的行为set -e/--erase VARIABLE_NAME.
想法是擦除第一个参数,然后从$argv列表中获取剩余的参数.
例如
function loop --description "loop <count> <command>"
set count $argv[1]
set --erase argv[1]
for i in (seq 1 $count)
eval $argv
end
end
Run Code Online (Sandbox Code Playgroud)
用法
$ loop 3 echo hello world
hello world
hello world
hello world
Run Code Online (Sandbox Code Playgroud)
ter*_*rje 11
您也可以使用我认为更具可读性的阅读:
function loop
echo $argv | read -l count command
for i in (seq 1 $count)
eval $command
end
end
Run Code Online (Sandbox Code Playgroud)
这样可以更好地工作,尤其是当您想要使用多于第一个参数时.
echo $argv | read -l first second rest
Run Code Online (Sandbox Code Playgroud)