[12180] Замена[119335] в этом контексте почти синонимична расширению [119336][119337], так как их значения перекрываются. Также не является полной подкатегорией другого, хотя в разделе [119338] Руководства GNU[119339], на который вы ссылаетесь, есть замены, которые рассматриваются как часть общего расширения.[12181] Расширение [119340][119341] извлекает значение идентификатора. Например, если [119342] это=что [119343], то при расширении [119344] это [119345] мы получим [119346] это [119347]. Расширение, которое не включает в себя подстановку, предопределено тем, что используемое значение уже существует и должно быть просто получено [119348], [119349], хотя это включает в себя комбинацию найденных/выраженных значений (например, с "арифметическим расширением").[12182]Подстановка [119350]создает значение в результате явной операции ввода/вывода. Например если [119352]this=$(foo bar)[119353], [119354]this[119355] является результатом выполнения [119356]foo bar[119357] и захвата его выхода.[119358]1[119359] Хотя значение, полученное в результате подстановки, может быть полностью предсказуемым, оно отличается от значения, полученного в нормальном расширении, так как на самом деле оно не существует до тех пор, пока подстановка не произойдет - оно произведено [119360]. [12183] Замены бывают двух видов: [119362] команда [119363] и [119364] процесс [119365], которые являются своего рода симметричными: [12184] "команда" в первом случае - это [119366]ls [119367], так же как и "процесс" во втором. Можно сказать, что подставляется действительно конец трубы. Замена процесса накладывается на [119368] перенаправление [119369]. Однако, это, вероятно, слишком ограничительное техническое ограничение, что подводит нас к сноске...[12185]foo bar[119545] в данном случае может быть функцией внутренней оболочки, и в этом случае нет межпроцессного ввода-вывода. Существование встроенных оболочек менее очевидно скрывает эту разницу. По содержанию входные и выходные данные будут одинаковыми. [12186]
27.01.2020, 20:12
Ссылка