альтернативное решение(jtc
)упрощает вопрос с помощью стандартного cli:
bash $ echo $OUTPUT | jtc -rl -w'[+0]' -w'[+0][conns]' | sed 's/: {.*//g; s/^"conns"://' | xargs -n2
1 1.0
2 2.0
bash $
jtc (в отличие от jq )— это утилита, которая ограничивает свою функциональность только операциями json (, поэтому ее интерфейс значительно проще ), однако манипулирование статьями за пределами модели данных JSON переносится на внешние инструменты unix.
РЕДАКТИРОВАТЬ :Новая версия jtc
поддерживает более простое решение:
bash $ jtc -w'l:v[-1]k' -T '"{key} {con}"' -qq <<<$OUTPUT
1 1.0
2 2.0
bash $
Посмотрите на трассировку выполнения команды(set -x
). С подтяжками:
+ no_func
./a: line 3: no_func: command not found
+ echo 'there is nothing'
there is nothing
+ exit 1
exit
выходит из оболочки (sub ). Поскольку фигурные скобки не создают подоболочку, exit
выходит из основного процесса оболочки, поэтому он никогда не достигает точки, в которой он должен работать echo $?
.
Когда вы используете фигурные скобки, ваш сценарий завершается со статусом 1 до того, как он достигает echo $?
в сценарии.
Вариант с подоболочкой:
$./script1.sh
./script1.sh: line 3: no_func: command not found
there is nothing
1 # <-- exit status of subshell
$ echo $?
0 # <-- exit status of script
Вариант с подтяжками:
$./script2.sh
./script2.sh: line 3: no_func: command not found
there is nothing # <-- the script exits with 1 after this line
$ echo $?
1 # <-- exit status of script