Как удалить ведущие нули из переменной? - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь удалить все нули перед переменной в bash. Но я не могу сохранить его в переменной. Некоторая помощь

проблема здесь: if (( $line > $lastMin )) ; then

Ошибка запуска Bash, так как значение слишком велико для базы (элемент ошибки "0455233")

Вот почему я пытаюсь сохранить это значение, удаляя все нули, которые я нахожу перед собой

Есть какие-нибудь решения, пожалуйста?

lastMin=0455233
zeroMin=$(( $lastMin | sed 's/^0*//' ))

Ответы [ 4 ]

5 голосов
/ 05 июня 2019
lastMin='0455233'
zeroMin=$((10#$lastMin))
3 голосов
/ 05 июня 2019

Удаление всех ведущих 0 х

lastMin='0000455233'
zeroMin=$(echo "$lastMin" | sed 's/^0*//')

echo "$zeroMin"   # output : 455233

Ваша проблема вызвана использованием $(( вместо $(, а не echo 'старой переменной.

2 голосов
/ 05 июня 2019

Арифметическое расширение $(( ... )) предназначено для арифметики.| является операцией «двоичного ИЛИ» внутри $(( ... )).

Вы просто хотите передать значение переменной в стандартный вывод другой команды, напр.sed.

В оболочках, совместимых с posix, вы можете использовать простой канал | с подстановкой процесса $():

zeroMin=$(printf "%s\n" "$lastMin" | sed 's/^0*//')
# or a little tiny bit less portable version with echo
zeroMin=$(echo "$lastMin" | sed 's/^0*//')

В bash вы можете использовать здесь строки <<<:

zeroMin=$(<<<$lastMin sed 's/^0*//')
1 голос
/ 05 июня 2019

Вам не нужно создавать отдельный процесс для этого, просто используйте расширения параметров :

$ a=01234
$ b=00001234
$ c=1234
$
$ echo "${a#${a%%[1-9]*}}"
1234
$ echo "${b#${b%%[1-9]*}}"
1234
$ echo "${c#${c%%[1-9]*}}"
1234

${var%%[1-9]*} удалит самый длинный суффикс, начинающийся с цифры от 1 до 9, из var; поэтому он оставит ведущие нули, и теперь, когда у вас есть ведущие нули, вы можете удалить их из var, используя ${var#${var%%[1-9]*}}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...