Пожалуйста, объясните, почему 1 4 5 6 отображается для последних четырех эхо-операторов? Однажды я столкнулся с этим случайно, но теперь мне интересно, почему это происходит.
Эти заявления работают, как и ожидалось (для меня).
$ echo [ 9876543210 ]
[ 9876543210 ]
$ echo [237890]
[237890]
Эти эхо-операторы последовательно отображают 1 4 5 6. Есть ли что-то особенное в этих числах?
$ echo [9876543210]
1 4 5 6
$ echo [abcd9876543210ghi]
1 4 5 6
$ echo [-123456-]
1 4 5 6
$ echo [-7654321-]
1 4 5 6
Благодарность!
- Возможный дубликат связан и полезен, но не дубликат. Возможный дубликат с точки зрения
rm
команды. Этот вопрос с точки зрения воспринимаемого "странного поведения"echo
команды. Основным ответом для обоих является глобализация. Кто-то, кто ищет проблемы сecho
командой, не легко найдетrm
вопрос, но, скорее всего, приземлится здесь.
1
4
5
и6
nullglob
, ваш второй пример (echo [237890]
) на самом деле ничего не напечатает, что могло бы быть подсказкой того, что вы видели расширение glob в других примерах.Ответы:
Открытая скобка
[
- это специальный символ для оболочки; он открывает алгоритм сопоставления с образцом, который гласит: «сопоставлять любые символы в скобках». Поскольку у вас есть 4 файла с именами: 1, 4, 5 и 6 в вашем текущем каталоге, когда символы в скобках содержат какие-либо из этих цифр, ваша оболочка заменяет сопоставление с этими именами файлов. Когда вы вместо того, чтобы использоватьecho [ 9876543210 ]
вы вызываете эхо с 3 параметрами:[
,9876543210
и]
.Вы должны процитировать параметры вашего оператора echo, чтобы оболочка не видела его как запрос на сопоставление с шаблоном.
(или удалите файлы с именами 1, 4, 5 и 6 - но это обходной путь, демонстрирующий поведение, а не исправление).
источник
echo [ 987 ]
звонкиecho
с тремя параметрами, чем даже упомянутьtest
?echo
интерпретируется по-разному вbash
зависимости от того, есть ли пробелы между квадратными скобками и что внутри них.[123]
против[ 123 ]
.