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