Как извлечь первую цифру из числа (переменная в сценарий bash)? [дубликат]

Самый простой способ - это, вероятно, использовать контейнер Docker, или если бы 32-битные контейнеры было легче найти.

Здесь есть официальный минимальный образ ArchLinux , но, поскольку он не говорит иначе, а это 2016 год, я бы предположил, что он 64-битный. Однако он показывает сценарий, который использовался для создания изображения, поэтому, вероятно, не составит большого труда добавить параметры, переключающие архитектуру.

Если у вас есть минимальный образ, установка LibreOffice будет простой задачей с использованием pacman. Запуск приложений X внутри контейнера немного сложен, но должен работать, если вы используете - net = host и -v / home / USER: / home: USER при создании контейнера и используйте то же имя пользователя / идентификатор пользователя внутри контейнера, что и снаружи.

5
02.04.2018, 11:14
5 ответов

Вы также можете использовать описанный ниже метод

cat script.sh

   #!/bin/bash
echo $1 | awk '{print substr($1,1,1)}'



 sh script.sh 90

Where 90 is the user input

выход 9

3
27.01.2020, 20:31
numbers='901.32.02'
firstdigit="${numbers:0:1}"

printf 'The first digit is "%s"\n' "$firstdigit"

Результатом вышеизложенного является

The first digit is "9"

Расширение параметра ${numbers:0:1}в bashдает вам подстроку длины 1 от начала строки (смещение ноль ). Этоbash-специфическая замена параметра (также в некоторых других оболочках, но не в стандарте POSIX ).

В оболочке POSIX вы также можете

firstdigit=$( printf "%s\n" "$numbers" | cut -c 1 )

Это будет использовать cutдля возврата только первого символа.

Или, используя раскрытие стандартных параметров,

firstdigit="${numbers%${numbers#?}}"

Сначала используется ${numbers#?}для создания строки с первой цифрой , удаленной , затем эта строка удаляется с конца $numbers, используя ${numbers%suffix}(, где suffix— результат первое расширение ).


Вышеприведенное предполагает, что первый символ $numbersна самом деле является цифрой. Если это не так, вам придется сначала удалить цифры, отличные от -, из начала значения :

.
numbers=$( printf '%s\n' "$numbers" | sed 's/^[^0-9]*//' )

или,

numbers="${numbers#${numbers%%[0-9]*}}"

${numbers[0]}работало бы, если бы каждый символ был отдельным элементом в массиве numbers(и если бы первый символ был цифрой ). Поскольку numbersне является массивом, он эквивалентен просто $numbers.

4
27.01.2020, 20:31

В Bash вы можете извлечь первый символ, используя расширение параметра :

${parameter:offset:length}

Пример:

$ var=901.32.02
$ first_char="${var:0:1}"
$ echo "${first_char}"
9
11
27.01.2020, 20:31

С кольцом

echo '901.32.02' | colrm 2
2
27.01.2020, 20:31

Если вы хотите обнаруживать только цифры (, а не другие типы символов ), вам следует использовать простое регулярное выражение.

[[ ${numbers} =~ ^([[:digit:]]) ]] && var=${BASH_REMATCH[1]}

В $var есть цифра или она пуста (даже не объявлена ​​).

0
27.01.2020, 20:31

Теги

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