![В чем разница между --param="value" и "--param=value"?](https://rvso.com/image/1413932/%D0%92%20%D1%87%D0%B5%D0%BC%20%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20--param%3D%22value%22%20%D0%B8%20%22--param%3Dvalue%22%3F.png)
В прошлом я читал (не могу вспомнить источник), что:
./script --param="value"
может иметь иные результаты по сравнению с:
./script "--param=value"
и что из-за этих различий (которые могут стать очевидными при переключении систем/ОС/дистрибутивов/оболочек) вы всегда должны делать --param="value"
. То есть, делать то, что я называю "поздним цитированием" (заключать в кавычки конечную часть или минимальное подмножество; не заключать в кавычки все).
Я также видел, как люди делали это при изменении переменных (например PATH=/bar:"$PATH"
, по сравнению с PATH="/bar:$PATH"
). В общем, я бы сказал, что из того, что я видел, "позднее цитирование" встречается чаще, чем цитирование всего текста.
Мой вопрос: есть ли на самом деле потенциальная разница между --param="value"
и "--param=value"
? Если мне нужно что-то процитировать, есть ли на самом деле разница между цитированием только части этого и цитированием всего?
Я склонен делать --param="value"
это вместо "--param=value"
, но делаю это в основном потому, что считаю, что так проще мысленно проанализировать, а не потому, что знаю о каких-либо технических различиях.
решение1
Нет никакой разницы, по крайней мере в тех конкретных случаях, которые вы упомянули. Оболочка удалит символы "
, и конечный результат будет тем же. Для отладки проблем с цитированием оболочки я иногда использую простую программу, которая просто выводит свой 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;
}