我正在尝试将多个参数传递给一个函数,但其中一个参数由两个单词组成,我希望 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("$@")
在脚本中无法自动执行此操作,因为脚本无法知道哪些空格是哪些(哪些单词在一起)。