私は次のコマンドを見つけました。
sudo chown `id -u` /somedir
`
知りたいです。この記号はどういう意味ですか?たとえば、上記のコマンドは正しく機能しますが、次のコマンドは機能しないことを確認しました。
sudo chown 'id -u' /somedir
答え1
これはバックティック。バックティックは引用符ではありません。それは非常に特別な意味を持っています。バックティック間に入力するすべての内容は、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
見るこの問題多くの状況で、バックティックを使用するのがなぜ悪い考えなのかを調べてください。
ところで、バックティックを文字通り使用するには、例えば文字列では、\
文字列の前にバックスラッシュ()を入れてエスケープできます。
答え2
ここにいくつかのことを追加したいと思います。
バックティックは`…`
実際に呼び出されます。コマンドの置き換え。コマンド置換の目的は、バックティック内のコマンドを評価し、その結果を実際のコマンドの引数として提供することです。
コマンドの置き換えは2つの方法で行うことができます。 1つはusing $(…)
、もう1つはです`…`
。どちらも同じように動作しますが、$(…)
現代的な方法ではるかに明確で読みやすいです。
だから
sudo chown $(id -u) /somedir
他よりも優先することができます。
もう一つ注意する必要があるのはコマンドの置き換えとの関係bash 引用規則bashで述べたように文書。
二重引用符内で置換が発生すると、結果に対して単語の区切りやファイル名の拡張は行われません。
答え3
ほとんど言及されていない説明:
バックティック(フランス語や他の言語で共通のアクセントとして機能するためGravesとも呼ばれる)標準出力のみしかし、標準エラーではありません。
前の例を続けると、次のようになります。
file `which hostname`
期待どおりに動作しますが、以下では
file `which hostnameX`
which
file
エラーが返され、その出力は交換されず、標準エラーに切り替わります。隣のコマンドラインには標準出力はまったくありません。以下を実行してこれを確認できます。
which hostnameX
which hostnameX 2>/dev/null
この場合、
file `which hostnameX`
生産する二つwhich hostnameX
エラー・メッセージ
本質的に、これは次のように減少します。
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 :)
答え4
この記号は、その中のすべてがこのコマンドの結果として解釈されることを意味します。
たとえば、
$ls /home
one two
$pwd
/usr/three
$cp `pwd` /home
$ls /home
one two three
上記の結果、three
ディレクトリは自分のディレクトリにコピーされます/home
。