【问题标题】:How to not expand a command-substitution into multiple parameters如何不将命令替换扩展为多个参数
【发布时间】:2015-10-08 02:37:54
【问题描述】:

因此,根据to the docs,一个写在多行上的命令将扩展为多个参数。这与 bash 行为不一致。例如

你好.lua:

local msg = "Hello, world!" 
return msg

鱼>

redis-cli EVAL (cat hello.lua) 0

失败 -

redis-cli EVAL "$(cat hello.lua)" 0 将在 bash 中成功。我的问题是如何防止 (cat hello.lua) 替换由于换行符而分裂成多个参数?

【问题讨论】:

  • 为什么这被否决了?

标签: shell fish


【解决方案1】:

fish 没有直接模拟 bash 的“$(...)”。目前fish中最好的技术是操纵$IFS,这是触发分裂的字符。您可以将其设为空:

set -l IFS
redis-cli EVAL (cat hello.lua) 0

这会将hello.lua 的全部内容作为单个参数传递。

假设您不希望 IFS 更改持续存在,您可以将更改范围限定为函数或块:

begin
  set -l IFS
  redis-cli EVAL (cat hello.lua) 0
end

【讨论】:

  • 感谢您抽出宝贵时间回复。由于 Fish 旨在以符合某些标准为代价成为更实用的 shell,我们是否有可能看到使用内置函数或符号拆分/连接参数? These things are very painful
  • 是的,我有一个old proposal,另外一个支持拆分和连接的内置string 提案也是actively worked on
猜你喜欢
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 2019-05-09
  • 1970-01-01
  • 2011-10-17
  • 2010-10-20
相关资源
最近更新 更多