关于shell:如何不将命令替换扩展为多个参数

How to not expand a command-substitution into multiple parameters

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

你好,Lua:

1
2
local msg ="Hello, world!"
return msg

鱼>

1
redis-cli EVAL (cat hello.lua) 0

失败-

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


fish没有直接类似于bash的"$(…)"。目前鱼类的最佳技术是操纵$IFS,这是触发分裂的特征。您可以使其为空:

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

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

假设您不希望您的IFS更改继续存在,您可以将更改范围限定到一个函数或一个块:

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