Addin 0 перед однозначным числом / текстом в bash-скрипте - PullRequest
0 голосов
/ 08 октября 2019

Я хотел бы сравнить число, являющееся результатом команды, с константой и выполнить некоторые манипуляции. То есть, если $id < 10, я хочу видеть 590$id, а если оно выше 10, я хочу видеть 59$id.

Я обнаружил, что expr здесь не работает:

ID=3
NUM=59$ID
if [ `expr $ID` -lt 10]; then
   NUM=590$ID
fi
echo $NUM

Вывод кода 593, а не 5903. Даже $(($ID + 5900)) -lt 5910 пишет 593.

Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Не могли бы вы попробовать следующее.

cat script.sh
#!/bin/bash
ID=$(printf "%02d" 3 )
##NUM=59$ID  ##Commented this to check if, condition is getting satisfied or not. Doesn't seem to be fit here.
(( $ID < 10 )) && NUM="59$ID"
echo "$NUM"

Вывод будет 5903 после выполнения кода выше.

1 голос
/ 08 октября 2019

Не используйте expr. Он старый и хитрый.

Не используйте backticks`. Они обескуражены и $( ... ) предпочтительнее.

Для арифметических сравнений используйте арифметические расширения . Просто

if (( ID < 10 )); then

Обратите внимание, что bash учитывает пробел, а в вашем скрипте есть синтаксическая ошибка, ему не хватает пробела - 10]; должно быть 10 ];.

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

Глядя на ваш код, я думаю, что вы просто хотите:

NUM=$((5900 + ID))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...