Как установить вино на ubuntu?

Ошибка unary operator expected, вероятно, связана с тем, что $PIDofP не заключен в кавычки в условии. В этом случае, когда $PIDofP является пустой строкой, оболочка не видит никакого значения в левой части = вместо пустого значения, отсюда и сообщение об ошибке.

Следующий фрагмент правильно реализует логику сравнения PID с помощью if/elif/else, что гарантирует генерацию только одного из трех возможных выходов echo. Он использует синтаксис сравнения POSIX (см. В чем разница между двойными и одинарными квадратными скобками в bash?).

#!/bin/sh
NAME=syslogd
PID=/var/run/$NAME.pid
PIDofP=`pidof $NAME`
if [ "$PIDofP" = "" ]; then
    echo "   No process is running."
elif [ "$PIDofP" -lt 1000 ]; then
    echo "   The PID number is lower than 1000. ($PID: $PIDofP)"
else
    # $PIDofP is >= 1000.
    echo "   The PID number is 1000 or higher. ($PID: $PIDofP)"
fi
exit 0

0
09.10.2018, 21:59
3 ответа

jq имеет функцию соединения именно для этой ситуации:

jq '[.major,.minor,.hotfix] | map (tostring) | join(".")'

Вы можете опустить map, если значения уже являются строками.

5
28.01.2020, 02:14

Используйте команды jqв серии подстановок команд в назначении переменных, которые жестко -кодируют точку между ними:

output="$(jq.major...)"."$(jq.minor...)"."$(jq.hotfix...)"
1
28.01.2020, 02:14
jq -j '.major, ".",.minor, ".",.hotfix, "\n"' file

на случай, если кто-то не понял, вот что написано на справочной странице:

Even literals like "hello" or 42 are filters - they take an input but always produce the same literal as output.

....

, If two filters are separated by a comma, then the input will be fed into both and there will be multiple outputs: first, all of the outputs produced by the left expression, and then all of the outputs produced by the right.

Так что нет необходимости в каких-либо усложнениях типа | map | join/ чего бы то ни было в таких простых случаях. Возможно, справочная страница должна быть лучше структурирована.

1
28.01.2020, 02:14

Теги

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