![--param=value 和 --param=value 有什麼差別?](https://rvso.com/image/1413932/--param%3Dvalue%20%E5%92%8C%20--param%3Dvalue%20%E6%9C%89%E4%BB%80%E9%BA%BC%E5%B7%AE%E5%88%A5%EF%BC%9F.png)
過去我讀過(不記得來源):
./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;
}