bash-shell 和 ksh-shell 之间的区别在于使用 while 和 read - 我可以在 bash 中做什么来获得与 ksh 相同的响应?

bash-shell 和 ksh-shell 之间的区别在于使用 while 和 read - 我可以在 bash 中做什么来获得与 ksh 相同的响应?

我有两个脚本:

  1. 在 bash 中

    #!/bin/bash
    H_VARIABLE=empty
    echo "Zeile1
          Zeile2" |
    while read satz
     do 
      H_VARIABLE="$H_VARIABLE $satz"
    done
    echo H_VARIABLE=$H_VARIABLE
    

    结果:

    H_VARIABLE=empty
    
  2. 在 ksh 中

    #!/usr/bin/ksh
    H_VARIABLE=leer
    echo "Zeile1
          Zeile2" |
    while read satz
     do
      H_VARIABLE="$H_VARIABLE $satz"
    done
    echo H_VARIABLE=$H_VARIABLE
    

    结果:

    H_VARIABLE=leer Zeile1 Zeile2  
    

结论:leer Zeile1 Zeile2!=leer

我在 bash 中该做什么才能获得与 ksh 相同的响应?

答案1

这里的问题是,在 bash 中,while当循环位于管道的 RHS 上时,它会在子 shell 中执行。你可以改为这样做

H_VARIABLE=leer
while read satz
  do H_VARIABLE="$H_VARIABLE $satz"
done < <(
echo "Zeile1
      Zeile2"
)

使用流程替换,或者使用这里是字符串

H_VARIABLE=leer
while read satz
  do H_VARIABLE="$H_VARIABLE $satz"
done <<< "Zeile1
          Zeile2"

也可以看看bash 脚本 var 在循环后没有改变

相关内容