Разница между bash-shell и ksh-shell при использовании while с read - что я могу сделать в bash для того же ответа, что и в ksh?

У меня есть два сценария:

  1. в баш

    #!/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. в кш

    #!/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 канала. Вы могли бы сделать вместо

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, не измененный после цикла

Другие вопросы по тегам