将位置参数分配给一行中的多个变量

sco*_*fax 5 bash function parameter-passing

我想知道是否可以将 bash 函数中的位置参数分配给单行中的多个变量。

以下方法有效,但需要多个赋值行:

foo () {
   var1=${1}
   var2=${2}
   var3=${3}
   echo "var1=$var1   var2=$var2   var3=$var3"
}

foo 11 "22 22" 33 # Correct result: var1=11   var2=22 22   var3=33
Run Code Online (Sandbox Code Playgroud)

以下代码在一行中分配输入参数,但它无法正确处理第二个参数:

bar () {
    read var1 var2 var3 <<<"$@"
    echo "var1=$var1   var2=$var2   var3=$var3"
}

bar 11 "22 22" 33 # Incorrect result: var1=11   var2=22   var3=22 33
Run Code Online (Sandbox Code Playgroud)

Ber*_*tel 0

您需要转义空格字符:

bar 11 "22\ 22" 33
Run Code Online (Sandbox Code Playgroud)

给出:

var1=11   var2=22 22   var3=33
Run Code Online (Sandbox Code Playgroud)