Fish 中的定界命令替换
Delimited command substitution in Fish
在 Fish 中是否有可能以我将命令定义为 echo 等命令的单个参数的方式执行命令替换?在 Bash 中,它等同于例如:
$ echo "$(cat file.txt)"
lorem
ipsum
Fish 建议的方法不适用于多行(或间隔)输出:
$ echo (cat file.txt)
lorem ipsum
如果我添加引号,它根本不会执行命令替换:
$ echo "(cat file.txt)"
(cat file.txt)
命令替换 bash returns 单个字符串。如果您回显未加引号的字符串,您将受到分词和文件名扩展的影响。
fish 中的命令替换 returns 默认情况下 行列表 。您可以通过重新注入换行符来打印结果:
$ 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
在 Fish 中是否有可能以我将命令定义为 echo 等命令的单个参数的方式执行命令替换?在 Bash 中,它等同于例如:
$ echo "$(cat file.txt)"
lorem
ipsum
Fish 建议的方法不适用于多行(或间隔)输出:
$ echo (cat file.txt)
lorem ipsum
如果我添加引号,它根本不会执行命令替换:
$ echo "(cat file.txt)"
(cat file.txt)
命令替换 bash returns 单个字符串。如果您回显未加引号的字符串,您将受到分词和文件名扩展的影响。
fish 中的命令替换 returns 默认情况下 行列表 。您可以通过重新注入换行符来打印结果:
$ 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