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

use*_*050 24 shell-script arguments

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

args=("$@")
function(){
 echo ${args[0]}
 echo ${args[1]}
 echo ${args[2]}
}
Run Code Online (Sandbox Code Playgroud)

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

我明白了

hi

hello

guys
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是:

hi 
hello guys
bye
Run Code Online (Sandbox Code Playgroud)

sil*_*nky 19

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

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

myfunc hi "hello guys" bye
Run Code Online (Sandbox Code Playgroud)


ctr*_*lor 10

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

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

sh my-shell-script hi "hello guys" bye
Run Code Online (Sandbox Code Playgroud)

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

sh my-shell-script hi 'hello guys' bye
Run Code Online (Sandbox Code Playgroud)

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

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

#!/bin/sh
my_procedure{
   echo "$1"
   echo "$2"
   echo "$3"
}
my_procedure("$@")
Run Code Online (Sandbox Code Playgroud)

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

  • 逃避它。`\"` (2认同)