--param="value" 和 "--param=value" 之间有什么区别?

--param="value" 和 "--param=value" 之间有什么区别?

我以前读过(不记得来源了):

./script --param="value"

与以下情况相比可能会有不同的结果:

./script "--param=value"

并且由于这些差异(在切换系统/操作系统/发行版/shell 时可能会变得明显),您应该始终这样做--param="value"。也就是说,执行我所说的“后期引用”(将引号放在尾部或最小子集周围;不要引用整个内容)。

我也见过有人在修改变量时这样做(即PATH=/bar:"$PATH",与 相比PATH="/bar:$PATH")。总的来说,从我看到其他人的做法来看,“后期引用”比引用整个内容更常见。

--param="value"我的问题是:和之间真的有潜在差异吗"--param=value"?如果我需要引用某些内容,引用其中的一部分和引用整个内容之间真的有区别吗?

我倾向于这样做--param="value"而不是"--param=value",但我这样做主要是因为我认为它更容易在心理上解析,而不是因为我知道任何技术差异。

答案1

至少在您提到的特定情况下没有区别。shell 将删除字符",最终结果相同。为了调试 shell 引用问题,我有时会使用一个简单的程序,只打印出它的 argv。例如,

$ 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;
}

相关内容