Почему команда echo > 1 2 3 создает файл с именем 1 и содержимым 2 3?

$ echo > 1 2 3; ls -latr 1; cat 1
-rw-rw-r-- 1 kahn kahn 4 Jun 23 14:05 1
2 3

Связано ли это с оценкой перенаправления >? Такой, что:

echo > 1 2 3

Можно также переписать как и технически:

echo 2 3 > 1

?

Существуют ли какие-либо ресурсы для лучшего понимания порядка операций с перенаправлением ввода-вывода и того, как он оценивается? Я признаю, что этот пример, вероятно, не был бы полезен или даже часто встречается, но я хотел бы лучше понять, что именно здесь происходит.

11
23.06.2020, 22:12
1 ответ

Слова разделены пробелами. Строка в кавычках рассматривается как одно слово независимо от пробелов. Значение переменной является кандидатом на разбиение на слова, когда оно используется (, поэтому обычно лучше всего заключать в двойные -кавычки имя переменной,"$var").

Оператор перенаправления использует следующее одиночное слово.

Полную информацию можно увидеть на справочной странице вашей оболочки (, например man bashв разделе «Расширения»)

The order of expansions is: brace expansion, tilde expansion, parameter, variable and arithmetic expansion and command substitution (done in a left-to-right fashion), word splitting, and pathname expansion.

4
18.03.2021, 23:24

Теги

Похожие вопросы