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

在 bash 中我可以说:

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

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

【问题讨论】:

标签: interpolation fish


【解决方案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)
猜你喜欢
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 2015-01-14
  • 2016-10-13
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多