在 bash 或 ksh 或 perl 中将字符串拆分为一个衬里

split string in one liner in bash or ksh or perl

var="valueA valueB"

我想如下所示拆分上面的字符串,并想在 bash shell.

上的一个衬垫中读取这些值

以下脚本不工作。

echo $var |awk '{print   }' |while read var; do echo  var1= and var2=;done 

echo $var |awk '{ var1= ; var2=}' |while read var1 var2; do echo  var1=$var1 and var2=$var2;done 

在bash中:

$ read -a foo <<< "$var"
$ set | grep ^foo
foo=([0]="valueA" [1]="valueB")
$ echo "${foo[1]}"
valueB

要将这些值放入 var1var2,请使用:

read var1 var2 <<<"$var"

上面使用了一个 here-string,应该可以在 bash、ksh 或 zsh 下工作。

以上假设默认情况下这两个值由空格分隔。只需更改 shell 的 IFS 变量的值即可使用其他分隔符。

以下对我有用。

var="valueA valueB"
echo $var |while read var1 var2 ;do  echo $var1 ---- $var2;done

输出将是:

valueA --- valueB

在 ksh93 中,这将起作用:

echo "$var" |
    read var1 var2 &&
        echo $var1 --- $var2

实际上与相同,但$var1和$var2的值被保留。

对于 bash,您需要 bash 4.x 并且需要(取消)设置一些选项。