Когда следует использовать кавычки?

Вы можете настроить запуск imwheelпри запуске в настройках среды рабочего стола. В GNOME вам, вероятно, следует создать файл .desktop(, следуя инструкциям вhttps://stackoverflow.com/a/8290652/5495101и использовать команду imwheelв поле Exec=).

Поскольку первое вращение прокрутки игнорируется, у меня была такая же проблема в Arch Linux, и я исправил ее, установивxf86-input-evdev(в дистрибутивах на основе Ubuntu, имя пакета должно бытьxserver-xorg-input-evdev)и перезагрузив компьютер.

3
27.10.2020, 17:47
2 ответа

Обычные кавычки не вложены друг в друга, но обратные кавычки имеют особое значение в двойных кавычках.

Более читабельно и чище использовать $()вместо обратных кавычек. Оба они означают подстановку команды , т. е. расширяются до вывода заключенной в них команды.

b="$(grep " a" "$a")"

Но вам не нужны внешние двойные кавычки в присваивании, поэтому следующее эквивалентно:

b=$(grep " a" "$a")

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

.
echo "$var1_$var2"    # two variables, $var1_ and $var2
echo "$var1"_"$var2"  # two variables, $var1 and $var2, separated by an underscore
# also possible:
echo "${var1}_$var2"
4
18.03.2021, 22:54

Поскольку вы использовали архаичную форму подстановки команд с обратными кавычками, ответ будет "это зависит". Некоторые снаряды (, например. В Bash )обратные кавычки начинают новый контекст цитирования, поэтому внутренние пары двойных кавычек вкладываются внутрь обратных кавычек и внешних двойных кавычек, и в итоге вы получаете эти четыре части в кавычках:

b="`grep " a" "$a"`"
#        c--c d--d
#  b--------------b
# a----------------a

Но... Некоторые другие оболочки (ksh )разбирают это так, что вторая двойная -кавычка завершает строку в двойных -кавычках независимо от обратной кавычки в середине. Результат примерно такой:

b="`grep " a" "$a"`"
# a------a  b-b  c-c

Который не делает то, что вы хотите.(Он запускает grep '', присваивает результат этому b, затем запускает a с аргументом, заданным пустой подстановкой команды.)

См.:кавычки внутри обратных кавычек внутри кавычек в ksh

Неудивительно, что POSIX оставляет этот случай неопределенным.


Тем не менее, если бы вы перешли на использование формы подстановки команд $(...), вы бы избежали этой ситуации, и в этом случае расширение всегда запускает новый контекст кавычек, поэтому оно вложено в двойной -кавычки, а двойные -кавычки внутри гнезда внутри $(...).

b="$(grep " a" "$a")"
#         c--c d--d
#   b--------------b
# a-----------------a

См.:

И помните, друзья не позволяют друзьям использовать обратные кавычки.


And to add to the confusion, my teacher told me that in order to prevent the system from misinterpreting the variable name with the text that coes after it, we should add another double quote around the variable name.

Для этого вы можете использовать кавычки или заключать имя переменной в фигурные скобки. Итак, ниже $fooрасширяется и добавляется фиксированная строка barво всех трех вариантах:

$ foo=xxx
$ echo "$foo""bar" "$foo"bar "${foo}bar" 
xxxbar xxxbar xxxbar

Последнее, вероятно, легче всего читать.

What do nested quotes do? And when should we use quotes?

Кавычки не вкладываются друг в друга без чего-то вроде подстановки команд между ними, как указано выше. Без одного подобные кавычки просто заканчивают цитирование, а другие кавычки действуют как обычные символы, ничего не цитируя.

.это две строки в кавычках с частью без кавычек между ними:

  "foo "abc def" bar"
# <---->       <---->
#          ^ unquoted space.

А вот одна строка в кавычках, которая так уж получилось, что содержит одинарные кавычки:

$ echo "foo 'abc def' bar"
foo 'abc def' bar

Одинарные кавычки передаются в echoкак часть аргумента строки команды -, точно так же, как буквы и пробелы. Они ничего не цитируют.

О том, когда, см.:Когда необходимо двойное -цитирование?

2
18.03.2021, 22:54

Теги

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