Bash CLI удаляет кавычки из вывода команды

Я пытаюсь загрузить файл JSON, используя jq для здесь . Это довольно просто, и это работает:

$ cat ~/Downloads/json.txt | jq '.name'
"web"

Однако мне нужно назначить вывод этой переменной для команды. Я пытался сделать это, и это работает:

$ my_json=`cat ~/Downloads/json.txt | jq '.name'`
$ myfile=~/Downloads/$my_json.txt
$ echo $myfile
/home/qut/Downloads/"web".txt

Но я хочу /home/qut/Downloads/web.txt.

Как убрать кавычки, то есть изменить "web" на web?

10
задан 25 November 2017 в 07:21

4 ответа

Вы можете использовать команду tr для удаления кавычек:

my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")
14
ответ дан 25 November 2017 в 07:21

Существует более простая и эффективная функция с использованием встроенной функции удаления префикса / суффикса оболочки:

my_json=$(cat ~/Downloads/json.txt | jq '.name')
    temp="${my_json%\"}"
    temp="${temp#\"}"
    echo "$temp"

Источник https://stackoverflow.com/questions/9733338/shell-script-remove- первый и последний-цитата-с-а-переменной

0
ответ дан 25 November 2017 в 07:21

Вы можете использовать eval echo следующим образом:

my_json=$(eval echo $(cat ~/Downloads/json.txt | jq '.name'))

, но это не идеально - может легко вызвать ошибки и / или недостатки в безопасности.

1
ответ дан 25 November 2017 в 07:21

В частном случае jq вы можете указать, что выходные данные должны быть в формате raw :

   --raw-output / -r:

   With this option, if the filter´s result is a string then  it  will
   be  written directly to standard output rather than being formatted
   as a JSON string with quotes. This can be useful for making jq fil‐
   ters talk to non-JSON-based systems.

Для иллюстрации используйте пример файла json.txt из ваша ссылка :

$ jq '.name' json.txt
"Google"

, тогда как

$ jq -r '.name' json.txt
Google
10
ответ дан 25 November 2017 в 07:21

Другие вопросы по тегам:

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