バックティック(`)を理解する

バックティック(`)を理解する

コマンドを試しています

$ b=5; echo `$b`;
-bash: 5: command not found

ただし、期待どおりに5は印刷されません。私がここで何を見逃しているのでしょうか?

コマンドで `(バックティック/バックティック)とはどういう意味ですか?`その中に含まれるコマンドが評価され、出力に置き換えられると言われているようです。

ベストアンサー1

バックティック間のテキストが実行され、コマンドの出力に置き換えられます(末尾の改行文字を除く、出力にNUL文字がある場合はシェルが異なる動作をすることを参照してください)。それはコマンドの置き換えコマンドの出力に置き換えられるからです。したがって、5を印刷するにはバックティックを使用できません。引用符を使用するecho "$b"か、引用符を削除してを使用できますecho $b

ご覧のように、5が含まれているため、$bbackticksを使用してbashコマンドを実行しようとすると、5そのコマンドが存在しないため、エラーメッセージで失敗します。

バックティックがどのように機能するかを確認するには、次のコマンドを実行します。

$ A=`cat /etc/passwd | head -n1`
$ echo "$A"

cat /etc/passwd |head -n1ファイルの最初の行を印刷する必要があります/etc/passwd。ただし、バックティックを使用しているため、コンソールに印刷されません。代わりにA変数に保存されます。$Aこれに対応してください。最初の行を印刷するより効率的な方法は、コマンドを使用することですが、head -n1 /etc/passwdバックティック内の式がマイナーである必要はないことを指摘したいと思います。

したがって、/ etc / passwdの最初の行がある場合、root:x:0:0:root:/root:/bin/bash最初のコマンドはbashで動的に置き換えられますA="root:x:0:0:root:/root:/bin/bash"

この構文は Bourne シェルに属します。引用と脱出はすぐに悪夢になることができます。特にネストを始めるとさらにそうです。 Kshは$(...)現在、標準化された代替案を導入しました(POSIX)で、すべてのシェル(Unix v9のBourneシェルを含む)でサポートされています。したがって、今$(...)は非常に古いBourneシェルに移植する必要がない限り、それを使用する必要があります。

`...`また、 の出力は$(...)変数拡張 (zsh ではトークン化のみ) と同様にトークン化およびファイル名生成の影響を受けるため、リストコンテキストで引用しなければならないことがよくあります。

おすすめ記事