3

其他人抱怨 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。

4

1 回答 1

11

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

然而,它所做的是在换行符上拆分命令替换,所以

set files (echo $files)

将工作。

或者,如果您想明确说明您这样做是为了拆分它,您可以使用string splitlike

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

然后最终会相同(因为目前string split只添加换行符),但看起来更清晰一些。(“--”是选项分隔符,因此 $files 中没有任何内容被解释为选项)

后者需要fish >= 2.3.0。

于 2017-12-25T20:51:37.170 回答