fish shell 如何将变量标记为列表
fish shell how to tokenize variable to a list
其他人抱怨 fish 总是将它们的变量拆分到列表中,这很奇怪。但对我来说,它只是将多行变量作为单个字符串。
我正在尝试编写 nautilus 脚本。鹦鹉螺应该设置一个名为 $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。
Fish 在设置变量后不会拆分变量(这称为 "word splitting")。
但是,它的作用是在换行符上拆分命令替换,因此
set files (echo $files)
会起作用。
或者,如果你想明确表示你这样做是为了拆分它,你可以使用 string split
like
set files (string split \n -- $files)
最终结果相同(因为目前 string split
仅添加换行符),但看起来更清晰一些。 (“--”是选项分隔符,因此 $files 中的任何内容都不会被解释为选项)
后者要求fish >= 2.3.0.
其他人抱怨 fish 总是将它们的变量拆分到列表中,这很奇怪。但对我来说,它只是将多行变量作为单个字符串。
我正在尝试编写 nautilus 脚本。鹦鹉螺应该设置一个名为 $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。
Fish 在设置变量后不会拆分变量(这称为 "word splitting")。
但是,它的作用是在换行符上拆分命令替换,因此
set files (echo $files)
会起作用。
或者,如果你想明确表示你这样做是为了拆分它,你可以使用 string split
like
set files (string split \n -- $files)
最终结果相同(因为目前 string split
仅添加换行符),但看起来更清晰一些。 (“--”是选项分隔符,因此 $files 中的任何内容都不会被解释为选项)
后者要求fish >= 2.3.0.