【问题标题】:Iterate over a tuple in bash [duplicate]在bash中迭代一个元组[重复]
【发布时间】:2020-05-04 16:51:24
【问题描述】:

我知道我可以像这样遍历 bash 中的列表:

for reg in xmm ymm zmm; do
  echo "Reg is $reg"
done

太棒了。

如果我想遍历 元组 列表怎么办,比如(假语法):

for reg, size in (xmm, 128) (ymm, 256) (zmm, 512); do
  echo "Reg $reg has size $size"
done

应该打印出来:

Reg xmm has size 128
Reg ymm has size 256
Reg ymm has size 512

有什么方便的方法来做到这一点?

【问题讨论】:

    标签: bash for-loop scripting


    【解决方案1】:

    您必须遍历可以使用read 拆分的字符串。例如:

    while IFS=, read -r reg size; do
        echo "Reg $reg has size $size"
    done <<EOF
    xmm,128
    ymm,256
    zmm,521
    EOF
    

    for x in xmm,128 ymm,256 zmm,512; do
        IFS=, read reg size <<< "$x"
        echo "Reg $reg has size $size"
    done
    

    【讨论】:

      【解决方案2】:

      您可以在进程替换中使用 printf 并在 while 循环中将其读取到 2 个变量中,如下所示:

      while read -r reg size; do
          echo "Reg $reg has size $size"
      done < <(printf '%s %s\n' xmm 128 ymm 256 zmm 512)
      

      Reg xmm has size 128
      Reg ymm has size 256
      Reg zmm has size 512
      

      您也可以使用这个备用的printf 命令:

      printf '%s\n' 'xmm 128' 'ymm 256' 'zmm 512'
      

      【讨论】:

        猜你喜欢
        • 2020-11-02
        • 2013-09-11
        • 2011-07-14
        • 1970-01-01
        • 1970-01-01
        • 2015-07-26
        • 2020-06-20
        • 1970-01-01
        • 2019-04-15
        相关资源
        最近更新 更多