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 无法识别任何命令)