【问题标题】:split string in one liner in bash or ksh or perl在 bash 或 ksh 或 perl 中将字符串拆分为一个衬里
【发布时间】:2015-12-27 14:34:26
【问题描述】:
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 

【问题讨论】:

    标签: regex bash perl ksh


    【解决方案1】:

    在 bash 中:

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

    【讨论】:

      【解决方案2】:

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

      read var1 var2 <<<"$var"
      

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

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

      【讨论】:

        【解决方案3】:

        以下对我有用。

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

        输出将是:

        valueA --- valueB
        

        【讨论】:

        • 不幸的是,这并没有真正起作用。 var1 和 var2 仅在子 shell 中的 while 块原因中可见。
        • 不需要循环。您可以使用echo $var | (read var1 var2 &amp;&amp; echo $var1 ---- $var2),但缺点与循环相同。
        【解决方案4】:

        在 ksh93 中,这将是现成的:

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

        实际上与https://stackoverflow.com/a/32855720/667820 相同,但保留了 $var1 和 $var2 的值。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-28
          相关资源
          最近更新 更多