fish shell如何将变量标记为列表

7tofc5zh  于 2023-06-24  发布在  Shell
关注(0)|答案(2)|浏览(104)

奇怪的是,其他人抱怨fish总是把变量拆分成列表。但对我来说,它只是将多行变量作为一个字符串。
我在写鹦鹉螺的剧本。鹦鹉螺应该设置一个名为$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS的变量,所选文件用换行符分隔。
我试着把它们列成一个列表,然后用鱼在上面循环。但它们只是作为一个单一的元素。

set -l files $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS

for i in (seq (count $files))
   echo (count $files) >> koko
end

文件koko现在显示数字1。

kwvwclae

kwvwclae1#

Fish不会在变量被设置后拆分变量(这被称为“单词拆分”)。
但是,它所做的是在换行符上分割命令替换,所以

set files (echo $files)

会成功的
或者,如果您希望清楚地表明您这样做是为了拆分它,您可以像这样使用string split

set files (string split \n -- $files)

这将最终相同(因为目前string split只添加换行符),但看起来更清晰一点。(“--”是选项分隔符,因此$files中的任何内容都不会被解释为选项)
后者要求鱼>= 2.3.0。

ogq8wdun

ogq8wdun2#

如果你想用空格分割变量,那么命令是:

set files (string split ' ' --no-empty -- $files)

别忘了--no-empty
现在,您还可以通过以下方式获取单个值,例如:

if set -q files[1]
    echo files[1] $files[1]
end

if set -q files[2]
    echo files[2] $files[2]
end

...

相关问题