Когда дело доходит до операции оболочки , я могу понять первый шаг, но второй шаг немного озадачивает меня. Вот мое понимание:
Сначала оболочка разбивает ввод на слова и операторы, а затем выполняет действия в соответствии с правилами цитирования. Вот некоторые из моих вопросов. Когда я выполняю:
$ \n
bash: n: command not found
Почему n: команда не найдена
? not \ n: команда не найдена
?
$ $'\n'
bash: $'\n': command not found
Почему не выполняется цитирование ANSI-C?
Между прочим, когда входными данными является файл сценария, как он разбивается на слова и операторы? Построчно или целиком?
Обратная косая черта заключает в кавычки следующий символ (см. ЦИТАТУ в man bash
). \ n
поэтому интерпретируется как n
(и, будучи первым словом команды, это предотвратит раскрытие псевдонима, см. НИКНЕЙМЫ в man bash
).
$ '\ n'
интерпретируется как цитируемый ANSI-C. Bash просто использует те же кавычки, чтобы показать проблемный характер. Вы можете получить ту же ошибку из
'
'
, что эквивалентно ей.
Процесс разделения слов описан в начале man bash
. Если вы сомневаетесь, задайте более конкретный вопрос или посмотрите исходный код .