bash
の場合 シェル、'{}'
そして {}
交換可能です。これは、すべてのシェル (fish
など) に当てはまるわけではありません。 ).
引数を一重引用符で囲むと、中括弧を find
に送信する必要があることを明示的に示します .使用状況によっては、bash シェルが中括弧の内容を置き換えることがあります。
以下に示すように、bash は空の括弧を置き換えず、コマンドに渡されます。 find
の場合 コマンド、それは問題ではありません。
$ echo {}
{}
$ echo {1}
{1}
$ echo {1,3}
1 3
$ echo '{1,3}'
{1,3}
ほとんどのユーザー (特に POSIX シェルを使用しているユーザー) にとって、違いはありません。
GNU find
のマニュアルページの例のセクションによると :
シェル スクリプトの句読点として解釈されないように、中かっこは一重引用符で囲まれていることに注意してください。
GNU のマニュアル ページの作成者は注意を怠っていると思いますが、マニュアル ページのすべての例で中括弧が引用されているわけではないことに注意してください。公式の GNU find ドキュメントからのこれらの例も、引用を省略しています。
POSIX / Single UNIX Specification の例では、括弧は引用されていません -exec
で使用する場合 オプション。
POSIX シェルでは、中かっこで囲まれた特別なパラメータがある場合にのみパラメータ展開が発生しますが、空の中かっこではありません .
Bash シェルには (移植性のない) 機能としてブレース展開が含まれていますが、そのようなパターンは、コンマまたはドットがブレース内に含まれている場合にのみ展開されます。 . Bash はコマンドのグループ化にも中かっこを使用しますが、実際にある場合を除き、これは発生しません。 中括弧内のコマンドのグループ。
最後に、 find -exec ls -l {} \;
を実行してみました sh
で 、 dash
と tcsh
しかし、これらのシェルはいずれも {}
を展開しませんでした 他のものに。他の人が指摘したように、fish
シェルは {}
を扱います 特に、これは POSIX シェルではありません (その作成者とユーザーはこれを利点と考えています)。 中括弧を引用しても害はありません しかし、魚の殻を使わない怠惰なタイピストは、魚の殻を省略しても罪悪感を感じるべきではありません.
ほぼすべてのシェル インタープリターが利用可能であるため、'{}'
の違いはまったくありません。 と {}
.
単一引用符は通常、埋め込まれた文字列が別のものに置き換えられないように保護するために使用されます。例:
'a b'
2 つの単一文字パラメーターになる引用符なしで、単一の 3 文字パラメーターです'$b'
a は文字通りドル記号の後に文字 b が続き、引用符なしで b 変数に含まれるものであり、設定されていない場合はおそらく何もありません'!!'
引用符で囲まれていないリテラルな感嘆符であり、一部の対話型シェルでは、履歴に最後に入力されたコマンドに展開されます'*'
文字通りのアスタリスクであり、引用符なしでは、現在のディレクトリ内の非表示でないファイル名のリストに置き換えられます。
POSIX 標準でも主流シェルでもない (sh
(ボーン)、ksh
、 bash
、 ash
、 dash
、 zsh
、 csh
、 tcsh
) {}
を展開 他の何かに、引用符は必要ありません.
ただし、fish
という名前のエキゾチックなシェルがあります。 、たまたま {}
を展開します 空の文字列として、例:
> ps -p %self
PID TTY TIME CMD
5247 pts/1 00:00:00 fish
> echo a {} b '{}'
a b {}
それがおそらく GNU find
の理由です ドキュメントは {}
を保護することを提案しています 引用符またはバックスラッシュによる解釈に対して。