1

ここで失敗した場所を指摘していただければ幸いです。

line="some text"
printf "other text"|read line;printf '%s' "$line"

出力:

いくつかのテキスト

私が念頭に置いていた出力:

その他のテキスト

これはサブシェルのことですか、それとも重要なものが欠けていますか?

4

2 に答える 2

5

パイプがあるため、$line変数はサブシェルで割り当てられ、親シェルは変更を記録しません。オプションを使用してshopt -s lastpipe、現在のシェルでパイプラインの最後のコマンドを実行できます

文字列のみを出力するこの例では、次の構文も使用できます。

read line <<< "other text"; printf '%s' "$line"

または、一般に、プロセス置換を使用できます

read line < <(printf "other text"); printf '%s' "$line"
于 2013-10-29T15:36:56.240 に答える