如何将带空格的参数传递给 shell 脚本函数?

如何将带空格的参数传递给 shell 脚本函数?

我正在尝试将多个参数传递给一个函数,但其​​中一个参数由两个单词组成,我希望 shell 函数将其作为一个参数处理:

args=("$@")
function(){
 echo ${args[0]}
 echo ${args[1]}
 echo ${args[2]}
}

当我调用这个命令时sh shell hi hello guys bye

我明白了

hi

hello

guys

但我真正想要的是:

hi 
hello guys
bye

答案1

你应该只引用第二个参数。

myfunc(){
        echo "$1"
        echo "$2"
        echo "$3"
}

myfunc hi "hello guys" bye

答案2

它与从 shell 调用任何内容(shell 脚本、C 程序、python 程序……)相同

如果从任何 Unix shell 调用,并且参数有空格,那么您需要引用它。

sh my-shell-script hi "hello guys" bye

您还可以使用单引号,这些更强大。它们阻止 shell 解释任何内容($!\*"等,除了'

sh my-shell-script hi 'hello guys' bye

您还应该引用函数/脚本中使用的每个变量。

请注意,在您的示例中,参数在到达函数之前就崩溃了(因为它们被传递给脚本)。

#!/bin/sh
my_procedure{
   echo "$1"
   echo "$2"
   echo "$3"
}
my_procedure("$@")

在脚本中无法自动执行此操作,因为脚本无法知道哪些空格是哪些(哪些单词在一起)。

相关内容