代码之家  ›  专栏  ›  技术社区  ›  Michael Gruenstaeudl

而bash中变量的循环行

  •  5
  • Michael Gruenstaeudl  · 技术社区  · 8 年前

    假设一个文件 file

    $ cat file
    foo
    bar
    baz
    

    进一步假设我希望使用while循环遍历每一行。

    $ while IFS= read -r line; do
    $   echo $line
    $   # do stuff
    $ done < file
    foo
    bar
    baz
    

    最后,请假设我希望传递存储在变量中的行,而不是存储在文件中的行。如何在不接收以下错误的情况下循环保存为变量的行?

    $ MY_VAR=$(cat file)
    $ while IFS= read -r line; do
    $   echo $line
    $   # do stuff
    $ done < $(echo "$MY_VAR")
    bash: $(echo "$MY_VAR"): ambiguous redirect
    
    2 回复  |  直到 8 年前
        1
  •  5
  •   Barmar    8 年前

    <

    done <<< "$MY_VAR"
    

    done < <(echo "$MY_VAR")
    
        2
  •  4
  •   Charles Duffy    6 年前

    您有几种选择:

    • done <<<"$MY_VAR"
    • heredoc(POSIX兼容)将与 /bin/sh ):

      done <<EOF
      $MY_VAR
      EOF
      
    • 进程替换(也是非POSIX扩展,但使用 printf echo 使它在支持它的外壳之间更可预测;请参阅中的应用程序使用说明 POSIX spec for echo done < <(printf '%s\n' "$MY_VAR")