Я написал сценарий для извлечения определенного значения file.json
. Это сработает select
, если я предоставлю значение jq , но переменная не работает (или я не знаю, как ее использовать).
#!/bin/sh
#this works ***
projectID=$(cat file.json | jq -r '.resource[] | select(.username=="myemail@hotmail.com") | .id')
echo "$projectID"
EMAILID=myemail@hotmail.com
#this does not work *** no value is printed
projectID=$(cat file.json | jq -r '.resource[] | select(.username=="$EMAILID") | .id')
echo "$projectID"
json
bash
environment-variables
jq
asidd
источник
источник
jq -r --arg var "$var" '.[$var]'
stackoverflow.com/questions/34745451/…Ответы:
Также рассмотрите возможность передачи переменной оболочки (EMAILID) в качестве переменной jq (здесь также EMAILID для иллюстрации):
Постскриптум
Для записи, другой возможностью было бы использовать
env
функцию jq для доступа к переменным среды. Например, рассмотрим эту последовательность команд bash:Результатом является строка JSON:
источник
jq
правильно создать фильтр, используя значение, а не использовать егоbash
для создания строки,jq
интерпретируемой как фильтр. (Подумайте, что произойдет, если значениеEMAILID
содержит a)
.)function n2 { termux-contact-list |jq -r --arg v1 "$1" '.[] | select(.name==$v1)|.number' }
Звонок:n2 Name1
env
функция jq изменяется между jq 1.4 и 1.5+, поэтому ссылки наenv.EMAILID
(в этом примере ответа) не работают в jq 1.4, поэтому рекомендуется использовать--arg EMAILID "$EMAILID"
конструкцию, если вам нужно использовать jq 1.4. Надеюсь это поможет; просто мне понадобился день +, чтобы разобраться в этом для себя;)--arg
будут переданы в виде строк. Если вы хотите передать данные другого типа JSON, используйте--argjson
, который будет анализировать строку как JSON, например,--argjson myObj '{"a": [1, 2]}'
Я решил эту проблему, избежав внутренних двойных кавычек
источник
-c
Это вопрос цитаты, вам нужно:
Если вы поместите одиночные кавычки, чтобы ограничить основную строку, оболочка принимает
$EMAILID
буквально.«Двойная кавычка» каждый литерал , который содержит пробелы / метасимволы и каждое расширение:
"$var"
,"$(command "$var")"
,"${array[@]}"
,"a & b"
. Используйте'single quotes'
для кода или буквального$'s: 'Costs $5 US'
,ssh host 'echo "$HOSTNAME"'
. См.Http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words.
источник
termux-contact-list |jq -r '.[] | select(.name=='$1')|.number'
. Результат:jq Compile error
jq
не любят одинарные кавычки:jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell quoting issues?)
Разместите это здесь, так как это может помочь другим. В строке может потребоваться передать кавычки в jq. Чтобы сделать с jq следующее:
в bash вы могли бы сделать
по существу избегая кавычек и передавая их в jq
источник
Другой способ сделать это - использовать флаг jq "--arg". Используя исходный пример:
См. Здесь, где я нашел это решение: https://github.com/stedolan/jq/issues/626
источник
Я знаю, что чуть позже отвечу, извините. Но у меня это работает.
И теперь я могу получить и передать содержимое переменной jq
В моем случае мне нужно было использовать двойные кавычки и кавычки для доступа к значению переменной.
Ура.
источник
У Jq теперь есть лучший способ доступа к переменным среды, вы можете использовать env.EMAILI:
источник
Немного не связано, но я все равно помещу его здесь.Для других практических целей переменные оболочки могут использоваться как -
источник