2016-03-15 51 views
1

Fish中是否有可能以我定義命令的方式執行命令替換?這種方式將被視爲echo命令的單個參數?在bash這將相當於例如:Fish中的分隔命令替換

$ echo "$(cat file.txt)" 
lorem 
ipsum 

由魚所建議的做法並不多行(或間隔)輸出工作:

$ echo (cat file.txt) 
lorem ipsum 

如果我添加引號,這不是完全不執行命令替換:

$ echo "(cat file.txt)" 
(cat file.txt) 

回答

4

bash中的命令替換返回單個字符串。如果您使用未加引號的字符串進行回顯,則需要進行分詞和文件名擴展。

默認情況下,魚的命令替換返回行的列表。您可以通過重新注入新行打印結果:

$ printf "%s\n" (cat file.txt) 
lorem 
ipsum 

或者,您可以使用IFS變量設置爲空字符串,因此不會發生分線:

$ echo (cat file.txt) 
lorem ipsum 
$ begin; set -l IFS ""; echo (cat file.txt); end 
lorem 
ipsum 

$ set contents (cat file.txt); echo $contents; echo (count $contents) 
lorem ipsum 
2 
$ begin; set -l IFS ""; set contents (cat file.txt); end 
$ echo $contents; echo (count $contents) 
lorem 
ipsum 
1 

我在本地重新設置了新範圍的IFS以避免破壞我的shell中的當前值。

參考文獻:https://fishshell.com/docs/current/index.html#expand-command-substitution