Когда я ввожу одинарную кавычку '
в терминале, он переходит в какой-то другой режим, и команды не выполняются. Что это за режим и когда мы его используем?
root@sai:~# '
> ls
> '
ls
: command not found
root@sai:~#
command-line
bash
manikanta
источник
источник
'
)Ответы:
По сути, оболочка запрашивает полную команду / выражение и по этой причине отображает
PS2
строку приглашения.От
man bash
:И немного до этого:
Таким образом, как вы можете догадаться из прочтения документации, оболочки имеют несколько подсказок с разными целями.
PS1
Подсказка вашаroot@sai:~#
строка, которая появляется обычно при вводе команд.>
этоPS2
подсказка. Есть и другие:PS3
дляselect
блока команд иPS4
для отладки с помощьюset -x
команды. В этом случае нас больше интересуетPS2
.Существует много способов, которыми оболочка может отображать
PS2
приглашение (и где может потребоваться выполнение команды на новой строке). То же самое приглашение используется, когда вы выполняетеhere-doc
перенаправление (где команда считается завершенной, когда вы видите завершающую строку, в этом примереEOF
):Очень часто продолжение длинной команды может быть сделано путем добавления
\
и немедленной (!) Новой строки, что приведет к появлению того же приглашения:Когда в командной строке перед новой строкой появляются каналы, логические операторы или специальные ключевые слова, команда также считается неполной до тех пор, пока не будут введены все последние операторы:
В вашем конкретном случае, одиночная кавычка подразумевает буквальную интерпретацию того, что находится между одинарными кавычками. Таким образом, как указала Занна, вы вводите команду, которая состоит из новой строки +
ls
+ новой строки. Такое исполняемое имя файла не может быть найдено (и обычно имена команд должны состоять только из буквенно-цифровых символов, а также подчеркивания, тире и точек). Хотя действительно возможно иметь имена файлов, содержащие специальные символы, их всегда избегают.ПРИМЕЧАНИЕ : такое поведение, как показано в вашем примере, относится только к оболочкам, похожим на Bourne, в том числе
bash
,dash
(в Ubuntu оно имеет символическую ссылку/bin/sh
)ksh
иmksh
.csh
и его производные не ведут себя так:Тем не менее, в интерактивном режиме
csh
все равно будет вызываться?
как prompt2, когда требуется больше ввода:Смотрите также:
источник
What's the difference between <<, <<< and < < in bash?
оффлайн / неверная.Оболочка просто ждет закрывающей цитаты. Когда вы вводите его, он будет делать именно то, что обычно делает, и пытается выполнить введенную команду.
Кавычки заставляют оболочку не интерпретировать специальные символы, что означает, что расширения не выполняются. Одинарные кавычки полностью подавляют всю интерпретацию специальных символов. Обычно новая строка разделяет команды, но здесь вы включили новые строки как часть команды, заключив их в кавычки.
Поскольку такой команды нет
<newline>ls<newline>
, она не найдена.источник