[113760] Самое главное различие между [12185]и [12186] заключается в том, что первая запускается в подоболочке, а вторая нет. Итак:[12187]OUTPUT:[12188]OUTPUT:[12189]Понятия не имею, зачем кому-то использовать исполняемый файл [114254]bash[114255] таким образом. Если вам нужно вызвать его, используйте POSIX гарантированно встроенный [114256]sh[114257]. Или [114258](subhell eval)[114259], если вы хотите защитить свою среду.[12190]Лично я предпочитаю оболочку [114260].dot[114261], прежде всего.[12191]OUTPUT[12192]BUT YOU NEED IT AT ALL? [12193]Единственная причина использовать либо то, что ваша переменная действительно назначает или оценивает другую, либо разделение слова важно для вывода.[12194]Например:[12195]OUTPUT:[12196]Это работает, но только потому, что [114262]echo[114263] не заботится о количестве аргументов.[12197]OUTPUT:[12198]Видите? Двойные кавычки возникают потому, что результат разложения оболочки [114264]$var[114265] не вычисляется для [114266]quote-removal[114267]. [12199]OUTPUT:[12200] Но с помощью [114268]eval[114269] или [114270]sh[114271]:[12201]OUTPUT:[12202] Когда мы используем [114272]eval[114273] или [114274]sh[114275] оболочка берет второй проход по результатам разворотов и оценивает их также как потенциальную команду, поэтому котировки имеют значение. Вы также можете сделать:[12203]OUTPUT[12204]
Adam Ryczkowski
19.02.2014, 16:59
Ссылка