Bashの変数拡張

Bashの変数拡張

私は次のコマンドを試しました

variable='one|name'
echo $variable

出力は次のとおりです

one|name

代わりにecho one|nameエラーが発生しますNo command 'name' found。 Bashはそれを|パイプとして扱い、コマンドを入力nameとしてone実行しようとするので、これは意味があります。

echo $variableしかし、なぜ印刷されますかone|name?パラメータと変数が拡張された後は同じでなければなりませんかecho one|name

バージョン:

GNU bash, version 4.3.11(1)-release (i686-pc-linux-gnu)

ベストアンサー1

いいえ、それは方法のせいではありません。bash 操作命令

と入力すると、echo one|nameコマンドbashが解析され、|パイプライントークンとして処理されるため、|パイプラインが実行されます。

と入力すると、echo $variable変数を拡張する前にトークンの解析が行われるため、コマンドは次のbash2つの部分に解析されますecho。その後、$variable拡張される変数拡張を実行します。この場合は文字列の一部であり、パイプトークンと見なすことはできません(もちろん、)。$variableone|nameone|name|トークン認識フレーズ完全な)。フィールド分割を実行するために区切り文字として使用できる唯一の特別な点は、変数に次のものが含まれているIFS場合です。|bash|

$ variable='one|name'
$ IFS='|'
$ echo $variable
one name

おすすめ記事