Diferença entre o bash-shell e o ksh-shell usando while with read - o que posso fazer no bash para a mesma resposta que no ksh?

0

Eu tenho dois scripts:

  1. no bash

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

    Resultado:

    H_VARIABLE=empty
    
  2. no 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
    

    Resultado:

    H_VARIABLE=leer Zeile1 Zeile2  
    

Conclusão: leer Zeile1 Zeile2 ! = leer

O que posso fazer no bash para obter a mesma resposta que no ksh?

    
por Jürgen Hahnefeld 12.05.2016 / 17:25

1 resposta

2

O problema aqui é que, no bash, o loop while é executado em um subshell quando está no RHS de um pipe. Você poderia fazer em vez disso

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

usando a substituição do processo ou, usando uma string aqui

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

Veja também script bash var não alterado após o loop

    
por steeldriver 12.05.2016 / 17:40