Fish Shell如何将变量分词为列表

5

有人抱怨说fish总是将他们的变量拆分为列表,我感到很奇怪。但对我来说,这只是将多行变量作为单个字符串。

我正在尝试编写一个nautilus脚本。Nautilus应该使用换行符分隔所选文件,并设置一个名为$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS的变量。

我正在尝试将它们作为列表获取,以便在fish中循环遍历它们。但它们只被视为单个元素。

set -l files $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS

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

文件 koko 现在显示数字 1。
2个回答

15

在变量被设置后,Fish不会将其拆分(这被称为“单词拆分”)。

然而,它会在换行符上拆分命令替换,因此

set files (echo $files)

会生效。

或者,如果你希望明确你是为了拆分而这样做,你可以使用string split,例如:

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

使用字符串分割只能添加新行,但最终结果相同,更清晰。 (“-”是选项分隔符,因此 $files 中的任何内容都不会被解释为选项)

后者需要 fish >= 2.3.0。


0
如果你想按空格分割变量,那么命令是:
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

...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接