myvar
この例では、Bashがなぜ価値がないのか、まったく理解していません。
echo hello | read myvar && echo $myvar
2つの別々のコマンドでコマンドを実行すると、変数の範囲が2行目には存在しないことがわかります。
答え1
パイプ処理されたプロセスはサブシェルで実行され、サブプロセスは親プロセスの環境に影響を与えることはできません。子プロセスが終了すると、独自の環境も消えます。あなたの例では、サブシェルで実行 - myvarが設定されていますが、両方のステートメントを実行している親シェルにread myvar
再度伝播されません。echo
ここで文字列を使用するかリダイレクトする必要があります。プロセスの交換パイプの代わりに。たとえば、
文字列は次のとおりです。
$ read myvar <<<"hello" && echo $myvar
hello
文字列は固定文字列、変数、または2つの組み合わせです。
$ read myvar <<<"Hello $USER, your home is $HOME" && echo $myvar
Hello cas, your home is /home/cas
リダイレクトとプロセスの置き換え:
$ read myvar < <(echo hello) && echo $myvar
hello
また見なさい: 私の変数が1つの「読み込み中」ループではローカルですが、一見似ている他のループではローカルではないのはなぜですか?