用bash或ksh或perl在一个衬里中分割字符串

时间:2015-09-29 23:32:03

标签: regex bash perl ksh

var="valueA valueB"

我想拆分上面的字符串,如下所示,并希望在bash shell上的一个衬里中读取这些值。

以下脚本无效。

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

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

4 个答案:

答案 0 :(得分:4)

要将这些值转换为var1var2,请使用:

read var1 var2 <<<"$var"

以上使用here-string,应该在bash,ksh或zsh下工作。

默认情况下,上面假定两个值由空格分隔。只需更改shell IFS变量的值即可实现其他分隔符。

答案 1 :(得分:0)

在bash中:

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

答案 2 :(得分:0)

以下为我工作。

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

输出将是:

valueA --- valueB

答案 3 :(得分:0)

在ksh93中,这将适用于货架:

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

https://stackoverflow.com/a/32855720/667820有效,但保留$ var1和$ var2的值。

对于bash,你需要bash 4.x并且某些选项需要(un)设置。