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

Ada*_*ran 2 shell nautilus fish

其他人抱怨鱼总是将变量分成列表,这很奇怪.但对我而言,它只是将多行变量作为单个字符串.

我正在尝试编写一个nautilus脚本.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
Run Code Online (Sandbox Code Playgroud)

并且文件koko现在显示数字1.

fah*_*aho 6

Fish在设置后不会对变量进行拆分(这称为"单词拆分").

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

set files (echo $files)
Run Code Online (Sandbox Code Playgroud)

将工作.

或者,如果你希望说清楚,你这样做是拆分它,你可以使用string split

set files (string split \n -- $files)
Run Code Online (Sandbox Code Playgroud)

然后它会以相同的方式结束(因为目前string split只添加换行符),但看起来更清晰一些.(" - "是选项分隔符,因此$ files中的任何内容都不会被解释为选项)

后者要求鱼> = 2.3.0.