代码之家  ›  专栏  ›  技术社区  ›  user3467349

如何不将命令替换扩展为多个参数

  •  2
  • user3467349  · 技术社区  · 9 年前

    所以根据 to the docs 写在多行上的命令将扩展为多个参数。这与bash行为不符。例如

    hello.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) 是否因换行而拆分为多个参数?

    1 回复  |  直到 9 年前
        1
  •  3
  •   ridiculous_fish    9 年前

    fish与bash的“$(…)”没有直接的相似之处。鱼类目前最好的技术是操纵 $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