回答:
これはバックティックです。バックティックは引用符ではありません。それは非常に特別な意味を持っています。バックティックの間に入力するものはすべて(chown
例のように)メインコマンドの前にシェルによって評価(実行)され、その実行の出力はそのコマンドで使用されます。コマンドライン。
だから何
sudo chown `id -u` /somedir
(ユーザーIDに応じて)効果的に実行されます:
sudo chown 1000 /somedir
\ \ \ \
\ \ \ `-- the second argument to "chown" (target directory)
\ \ `-- your user ID, which is the output of "id -u" command
\ `-- "chown" command (change ownership of file/directory)
`-- the "run as root" command; everything after this is run with root privileges
この質問を見て、多くの状況でバックティックを使用するのは良い考えではない理由を理解してください。
ところで、あなたは文字通り、バッククォートを使用したい場合は、たとえば、文字列では、あなたが(バックスラッシュを置くことによって、それを逃れることができ\
、その前に)。
$()
、ほとんどの状況で使用するのは良い習慣だと思いますが、逆流を悪化させることはありません。実際には、コマンドラインでの入力がはるかに高速であることを認める必要があります(少なくとも5回と比較して2回のキーストロークを含むShift
)。
$( )
が` `
、少なくともフランス語キーボードよりも間違いなく入力しやすいでしょう。
ここにもう少しポイントを追加したいと思います。
バックティック`…`
は実際にはコマンド置換と呼ばれます。コマンド置換の目的は、バックティック内に配置されたコマンドを評価し、その結果を実際のコマンドの引数として提供することです。
コマンド置換は、1が使用している2つの方法で行うことができ$(…)
、他方があります`…`
。どちらも同じように機能しますが、$(…)
フォームは最新の方法であり、より明確で読みやすくなっています。
など
sudo chown $(id -u) /somedir
他に優先することができます。
そして、ここで注意する必要があるもう1つのことは、bash 文書で言及されているbashの引用規則とのコマンド置換関係です。
置換が二重引用符で囲まれている場合、結果に対して単語の分割とファイル名の展開は実行されません。
$(...)
より良くネストします。
$()
そして、"``"
同じように動作しません
明確化に関する1つのメモはめったにカバーされません。
バックティック(フランス語や他の言語で共通のアクセントとしても機能するためGravesと呼ばれることもあります)は、標準出力のみを置き換えますが、標準エラーは置き換えません。
したがって、前の例を続けるには:
file `which hostname`
期待どおりに動作しますが、次の場合:
file `which hostnameX`
which
はエラーを返し、その出力は、file
;の隣のコマンドラインに代入するのではなく、標準エラーになります。次のコマンドを実行して確認できる標準出力はまったくありません。
which hostnameX
which hostnameX 2>/dev/null
この場合、
file `which hostnameX`
2つのエラーメッセージを生成します(1つwhich hostnameX
目はファイル名によるものであり、2つ目は前者の直後であり、ファイル自体によるものであり、ファイル名がないことを検出するため、コマンド全体
基本的には次のようになります。
file
もちろん、これは不適切な使用であり、使用エラーを返します。
(自分で確認したい場合は、以下を試してください:
file `which hostnameX 2>/dev/null` # just the file-command bad-usage error msg is printed
file `which hostnameX 2>/dev/null` 2>/dev/null # now nothing is printed on the screen :)
バッククォートはコマンド置換に似ています。このバックティックの構文は古風であり、2つの括弧を持つドル記号が一般的であることを知っています$()
。
コマンド置換は、コマンドを実行し、その出力を後で使用するために変数に保存するための専用の構文を持つ単一の操作です。
thedate=$(date)
次に、結果を出力できます: '日付は%s \ n' "$ thedate" `です。
$()
です。date
です。$(date)
その出力が置換であることがわかります。printf
上記のコマンドごとに、変数で保持されている出力値を表示します。
$(your expression)
が、$()
式をネストできるのと同じことを行うには、使用する方が良い方法です。たとえばcd $(dirname $(type -P touch))
、touch
次のコマンドを含むディレクトリに移動します