В прошлом я читал (не могу вспомнить источник), что:

./script --param="value"

может иметь разные результаты по сравнению с:

./script "--param=value"

и что из-за этих различий (которые могут стать очевидными при переключении систем / ОС / дистрибутивов / оболочек), вы всегда должны делать --param="value" . То есть делайте то, что я называю "поздним цитированием" (поместите цитату вокруг конечной части или минимального подмножества; не цитируйте все это).

Я также видел, как люди делают это при изменении переменных (то есть PATH=/bar:"$PATH" , по сравнению с PATH="/bar:$PATH"). В целом, я бы сказал, что из того, что я видел, делают "поздние цитаты" чаще, чем цитирование всего этого.

Мой вопрос: действительно ли существует потенциальная разница между --param="value" и "--param=value"? Если мне нужно что-то процитировать, есть ли разница между цитированием всего лишь части и цитированием всего этого?

Я склонен делать --param="value" а не "--param=value" , но я делаю это в основном потому, что считаю, что анализировать легче, а не потому, что я знаю о каких-либо технических различиях.

1 ответ1

2

Там нет разницы, по крайней мере, в конкретных случаях, которые вы упомянули. Оболочка удалит " символы», и конечный результат будет таким же. Для устранения проблем с цитированием оболочки я иногда использую простую программу, которая просто распечатывает свой 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;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .