В чем разница между одиночными и двойными кавычками в оболочке Bash?

Оглавление:

В чем разница между одиночными и двойными кавычками в оболочке Bash?
В чем разница между одиночными и двойными кавычками в оболочке Bash?

Видео: В чем разница между одиночными и двойными кавычками в оболочке Bash?

Видео: В чем разница между одиночными и двойными кавычками в оболочке Bash?
Видео: Секреты Google. Поиск для продвинутых - YouTube 2024, Ноябрь
Anonim
Закрытие текста в кавычках является довольно стандартной практикой в командной строке, особенно при работе с файлами с пробелами в именах, но как вы знаете, использовать ли одинарные или двойные кавычки? Давайте посмотрим на разницу, и когда вы должны использовать один против другого.
Закрытие текста в кавычках является довольно стандартной практикой в командной строке, особенно при работе с файлами с пробелами в именах, но как вы знаете, использовать ли одинарные или двойные кавычки? Давайте посмотрим на разницу, и когда вы должны использовать один против другого.

Общее правило состоит в том, что двойные кавычки по-прежнему допускают расширение переменных внутри кавычек, а одинарные кавычки - нет. Продолжай читать.

Цитаты с простым текстом

Если вы просто прикладываете несколько слов текста, это не имеет значения, какой из них вы используете, так как они будут работать одинаково. Например, эти две команды будут создавать каталог с именем Test Directory:

mkdir 'Test Directory' mkdir 'Test Directory'

Более опытные типы, вероятно, заметят, что вы также можете использовать mkdir Test Directory, если хотите.

Расширение переменной оболочки

Разница между одиночными и двойными кавычками становится более важной, когда вы имеете дело с переменными в командной строке - по умолчанию bash собирается расширить переменную типа $ test в полную строку. Во-первых, мы назначим переменную:

test='This is a test'

Теперь вы можете использовать эту переменную в командной строке, как это, которая должна просто выводить Это тест на консоль:

echo $test

Здесь разница между двойными и одинарными кавычками становится более понятной - при использовании одинарных кавычек переменные не будут расширяться. Например, если вы запустите эту команду:

echo '$test'

Вы не увидите ничего, кроме «$ test» в командной строке при использовании одинарных кавычек, но он будет выводиться правильно, когда вы используете двойные кавычки:

Image
Image

То же самое работает, когда вы используете символ ``, чтобы развернуть команду в командной строке. Например, скажем, вы хотели использовать PWD команда из другой команды - вы используете обратные сигналы, чтобы сообщить оболочке о ее расширении:

echo `pwd`/test

Если вы были в своей домашней папке, вы увидите вывод, который выглядит так:

/home/geek/test

Например, вы находитесь в папке с пробелом в пути и хотите использовать команду ln для создания символической ссылки на файл в текущем каталоге. Обычно вам нужно указать полный путь при использовании команды ln, поэтому гораздо проще использовать `pwd` для сохранения ввода.

Посмотрите, что происходит, когда вы пытаетесь использовать команду без включения в кавычки:

ln –s `pwd`/test /home/geek/linkedname

Вместо этого вам нужно окружить кавычки:
Вместо этого вам нужно окружить кавычки:

ln –s '`pwd`/filename' /some/other/path

Для более конкретного примера предположим, что у нас есть структура папок, подобная этому примеру, где у всех имен файлов есть пробелы в них:

Так как команда unzip не поддерживает использование * для ее запуска во всех файлах, вам нужно использовать команду for. Здесь все становится интересным:
Так как команда unzip не поддерживает использование * для ее запуска во всех файлах, вам нужно использовать команду for. Здесь все становится интересным:

for f in *.zip;do unzip $f;done

К сожалению! Похоже, это не сработало.

Вместо этого нам нужно использовать двойные кавычки вокруг переменной $ f, например:
Вместо этого нам нужно использовать двойные кавычки вокруг переменной $ f, например:

for f in *.zip;do unzip '$f';done

Теперь каждый раз, когда команда команды проходит цикл, она фактически запускает команду, подобную этой:

unzip 'test 1.zip'

Конечно, он будет циклически проходить и запускать аналогичную команду для каждого файла в каталоге.

Давайте рассмотрим

Теперь, когда мы рассмотрели примеры, мы просто быстро рассмотрим, если вы его пропустили:

Двойные кавычки

  • Используйте, когда вы хотите заключить переменные или использовать расширение оболочки внутри строки.
  • Все символы внутри интерпретируются как обычные символы, кроме $ или `, которые будут расширены в оболочке.

Одиночные цитаты

Все символы в одинарных кавычках интерпретируются как строковый символ.

И таким образом заканчивается урок цитат. Используйте их с умом.

Рекомендуемые: