Fish shell - 如何插入子命令?

Posted

技术标签:

【中文标题】Fish shell - 如何插入子命令?【英文标题】:Fish shell - How to interpolate a subcommand? 【发布时间】:2014-08-05 05:51:15 【问题描述】:

在 bash 中我可以说:

$ echo "a$(echo b)c"
abc

如何在fish shell 中执行此操作?

【问题讨论】:

echo a(echo b)c...见fishshell.com/docs/current/index.html#expand 【参考方案1】:
echo a(echo b)c

如果有引号,则必须退出:

echo "a"(echo b)"c"

如果您的子命令可能有换行符,从 fish 2.3 开始,您必须保存并恢复 $IFS:

set -l IFS 
echo "a"(cat ~/file.txt)"c"
set -e IFS

最终string 将能够处理这种情况。

【讨论】:

这会以某种方式吞下所有换行符并且似乎不等效。最小示例:给定 echo -e "a\nb" > x 然后 bash echo "$(cat x)" 做正确的事情,而 fish echo (cat x) 会将换行符转换为空格(相当于不带引号的 bash echo $(cat x))。 除了将IFS设置为空之外,还有没有其他办法? string collect 现在可用于避免换行符拆分。用法示例:echo (cat x | string collect)

以上是关于Fish shell - 如何插入子命令?的主要内容,如果未能解决你的问题,请参考以下文章

让 fish shell 与 gcloud 命令行工具一起工作?

fish 设置环境变量;fish shell 相关使用说明记录;

我的鱼瞎了? (在 Mac OS Big Sur、M1 Mac 上将其设置为默认 shell 后,fish 无法识别任何命令)

Linux 中 Fish Shell

centos安装fish shell

处理命名管道时,fish shell 和 bash 有啥区别?