Редактирование значения дочернего элемента JSON с помощью jq

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

Должны ли работать расширения?

Одинарные кавычки в основном означают, что вам нужно буквальное значение строки. Поэтому они не очень полезны в большинстве случаев, когда вы хотите провести сравнение, так как обычно вы хотите сравнить переменные. Сравнение '$variable1' и '$variable2' каждый раз будет давать ложный результат, так как вы будете сравнивать литеральные строки, а не значения переменных.

Двойные кавычки по-прежнему позволяют выполнять некоторые расширения (подробнее об этом читайте в разделе "Кавычки" на странице man bash). В приведенном выше примере "$variable1" и "$variable2" фактически расширяются до значений, содержащихся в переменных, которые затем сравниваются.

Будьте внимательны к пустым строкам!

При использовании test для сравнения значений строк, помните, что расширение пустой строки без заключения в двойные кавычки может привести к синтаксическим ошибкам. Например, следующий код будет работать и побудит вас думать, что в нем нет ошибок:

str="STRING"
if [ $str = "STRING" ]; then
    echo "EQUAL"
fi

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

str=""
if [ = "STRING" ]; then
    echo "EQUAL"
fi

А = не является унарным оператором, даже если после него идет только один параметр. Чтобы избежать этого, используйте двойную кавычку вокруг имени переменной в сравнении, например, так:

str="STRING"
if [ "$str" = "STRING" ]; then
    echo "EQUAL"
fi

Есть и другие моменты, о которых следует помнить при выборе кавычек (например, экранирование некоторых специальных символов - $, `, \, и ! при включенном расширении истории - в двойных кавычках), но в основном, если вам нужна буквальная строка, используйте одинарные кавычки. Если вам нужно, чтобы некоторые расширения работали, используйте двойные кавычки. Вы также можете смешивать их, если хотите (это позволяет избежать некоторого экранирования):

hello='Hello World'
mystring="$hello"'!'
echo "$mystring"
8
09.12.2015, 19:38
0 ответов

Теги

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