【问题标题】:How can I assign the output of a function *with parameters* to a variable using bash?如何使用 bash 将*带参数*的函数的输出分配给变量?
【发布时间】:2019-12-18 08:39:12
【问题描述】:

类似于How can I assign the output of a function to a variable using bash?,但略有不同。

如果我有这样的功能:

function scan {
  echo "output"
}

...我可以轻松地将它分配给这样的变量:

VAR=$(scan)

现在,如果我的函数需要一个或多个参数,我如何使用“shell 扩展”语法将它们传递给函数?例如。这个:

function greet {
  echo "Hello, $1"
}

# Does not work
VAR=$(greet("John Doe"))

上面的内容在我的 bash(版本 5.0.3(1)-release)中产生了这样的错误:

$ ./foo.sh 
./foo.sh: command substitution: line 8: syntax error near unexpected token `"John Doe"'
./foo.sh: command substitution: line 8: `greet("John Doe"))'

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    在这段代码中:

    function greet {
      echo "Hello, $1"
    }
    
    # Does not work
    VAR=$(greet("John Doe"))
    

    错误是括号传递参数。 尝试这样做:

    function greet {
      echo "Hello, $1"
    }
    
    # works
    VAR=$(greet "John Doe")
    

    它应该可以工作。

    说明:当您使用 $ 和括号时,您必须像在 shell 中一样在括号命令中写入,以便在不带括号的情况下传递参数。

    【讨论】:

    • 谢谢。我已经在这里记录了这一点(在写问题的同时):stackoverflow.com/a/59388263/227779 :-)
    • 当它大部分只是重复我之前写的答案时,为什么我要投票呢?我在写问题时发现了我的问题的答案,但决定以问答方式写下答案。感谢您写回复,但您的回答并没有比我已经说明的更多。
    • 哦,抱歉,我的手机上没有看到您的回答。问候
    • 很公平。我现在会善意地支持你的回答。 :) 圣诞快乐!
    【解决方案2】:

    显然我最近一直在写很多 Java 代码。调用函数时去掉括号,一切正常:

    function greet {
      echo "Hello, $1"
    }
    
    VAR=$(greet "John Doe")
    

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 2021-11-15
      相关资源
      最近更新 更多