--param="value" と "--param=value" の違いは何ですか?

--param="value" と "--param=value" の違いは何ですか?

以前、私は次のようなことを読んだことがあります (出典は思い出せませんが)。

./script --param="value"

以下と比較して異なる結果になる可能性があります:

./script "--param=value"

そして、これらの違い(システム/OS/ディストリビューション/シェルを切り替えると明らかになる可能性がある)のため、常に を行う必要があります--param="value"。つまり、私が「遅延引用符」と呼んでいるものを実行します(引用符を末尾の部分または最小限のサブセットの周りに置き、全体を引用符で囲まない)。

また、変数を変更するときにもこれと同じことを行っているのを見たことがあります (つまりPATH=/bar:"$PATH"、 と を比較するPATH="/bar:$PATH")。一般的に、他の人が行っていることからすると、全体を引用符で囲むよりも、「後で引用符で囲む」方が一般的だと思います。

--param="value"私の質問は、との間に本当に潜在的な違いがあるか"--param=value"どうかです。何かを引用する必要がある場合、その一部だけを引用することと全体を引用することの間に本当に違いがあるのでしょうか。

--param="value"私はよりもを行う傾向があります"--param=value"が、技術的な違いを認識しているからではなく、精神的に解析する方が簡単だと思うため、主に を行います。

答え1

少なくともあなたが言及した特定のケースでは違いはありません。シェルは文字を取り除き"、最終結果は同じです。シェルの引用の問題をデバッグするために、私は引数を出力するだけの簡単なプログラムを使うことがあります。例えば、

$ printargs --param="value"
argv[0] = printargs
argv[1] = --param=value

$ printargs "--param=value"
argv[0] = printargs
argv[1] = --param=value

参考までに、コードを以下に示します。

#include <stdio.h>

int main(int argc, char** argv)
{
    int i;
    for (i = 0; i < argc; ++i) {
        printf("argv[%d] = %s\n", i, argv[i]);
    }
    return 0;
}

関連情報