Последний вариант лучше (в большинстве случаев), поскольку он явно передает каждый отдельный параметр в указанную команду в качестве одного аргумента командной строки.
В предыдущей версии любые пробелы, присутствующие в $cmd
или $var1
, приводили к отправке дополнительных (и, вероятно, нежелательных) аргументов командной строки.
Чтобы привести пример, с учетом $cmd = "cat"
и $var1 = "/tmp/my test file"
первая строка приведет к:
cat /tmp/my test file # three parameters
и второй даст:
cat "/tmp/my test file" # one parameter
Таким образом, первая версия будет разбивать имя файла на две части (и, вероятно, приведет к ошибкам «файл не найден»), но вторая версия сохранит $var1
без изменений в качестве одного параметра.
Однако, если вам нужно перенаправить вывод команды (например, 1> logfile 2>&1
) или другие функции оболочки (глобализация, каналы и т. Д.), Вам необходимо использовать первую версию.