コマンドで `(バックティック/バックティック)とはどういう意味ですか?

コマンドで `(バックティック/バックティック)とはどういう意味ですか?

私は次のコマンドを見つけました。

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`

whichfileエラーが返され、その出力は交換されず、標準エラーに切り替わります。隣のコマンドラインには標準出力はまったくありません。以下を実行してこれを確認できます。

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

関連情報