Чтобы установить Docker CE, вам необходимо настроить определение репозитория в соответствии с архитектурой вашей системы:
deb [arch=arm64] https://download.docker.com/linux/debian stretch stable
Microsoft не предоставляет пакеты.NET Core для вашей архитектуры, только для amd64
; вам нужно будет загрузить бинарные архивы и следовать инструкциям по их установке вручную.
Использование другого подхода к проблеме и предоставление решения в одну -строку с использованием только bash
функциональности:
$ cat demo.sh
#!/bin/bash
INPUT_PATH=/path/to/subfolder/file_17.txt
FILE_NUMBER=${INPUT_PATH:((${#INPUT_PATH} -6)):2}
echo ${FILE_NUMBER}
$
$./demo.sh
17
Более простой подход состоял бы в обратном отсчете от конца строки, т.е.
FILE_NUMBER=${INPUT_PATH: -6:2}
Очевидно, это решение зависит от строковой переменной, оканчивающейся на «##XXXX», где «##» — две интересующие цифры, а «XXXX» — последние 4 символа строки.
Проще всего использовать ФАЙЛ _НОМЕР вместо TMP:
FILE_NUMBER=$(basename ${INPUT_PATH})
FILE_NUMBER=${FILE_NUMBER:5:2}
Кроме того, использование расширения параметра быстрее, чем вызов базового имени:
FILE_NUMBER=${INPUT_PATH##*/}
FILE_NUMBER=${FILE_NUMBER:5:2}
Вы можете использовать sed, чтобы делать все в одной строке, но это медленнее и менее читаемо:
FILE_NUMBER=$(sed 's|.*/||;s/.....\(..\).*/\1/' <<<"$INPUT_PATH")
Синтаксис ${var:offset:length}
— это расширение параметра. Результат подстановки команды не является параметром (или переменной ).
«Хитрость» заключается в том, чтобы присвоить результат подстановки команды переменной.
Или выполните всю работу в подстановке команд:
num=$( echo "$INPUT_PATH" | rev | cut -d. -f2 | cut -d_ -f1 | rev )
Откажитесь от использования имен переменных ALLCAPS, оставьте их зарезервированными оболочкой. Однажды вы напишете PATH=something
, а затем удивитесь, почему ваш сценарий не работает .
Поскольку вы используете bash, вы можете использовать сопоставление регулярных выражений:
if [[ $input =~ ([[:digit:]]+)\.txt$ ]]; then
file_num=${BASH_REMATCH[1]}
fi
Для тех, кто использует zsh
вместоbash
:
Символы с 6-го по 7-й в конце хвостовой(части, возвращаемойbasename
)пути:
num=${${a_path:t}[6,7]}
($var:t
из csh
, чтобы получить t
аил)
Вы также можете выполнить num=${"$(basename -- "$a_path")":5:2}
, используя этот оператор ksh93
${var:offset:length}
, недавно добавленный в zsh
для совместимости. Подстановка команды должна быть заключена в кавычки, чтобы она не давала массив, так что :5:2
выбирает диапазон символов вместо диапазона элементов массива. Однако использование подстановки команд и выполнение basename
окажется менее эффективным и менее надежным, чем использование zsh
встроенного оператора :t
.
первая последовательность цифр в хвосте :
num=${(MS)${a_path:t}##<->}
${var##pattern}
— это оператор ksh, который удаляет самую длинную начальную строку, соответствующую pattern
из $var
. С флагом M
вместо удаления возвращается присоединенная часть M
, а S
ищет S
подстроки, а не только в начале.И <->
соответствует любой последовательности цифр(<x-y>
с неопределенными границами ).
последовательность цифр после _
в конце :
num=${${a_path:t}/(#m)*_(<->)*/$match[1]}
(потребности extendedglob
; будьте осторожны, он возвращает полный хвост, если в$a_path
)нет _digits
.
Или:
[[ $a_path:t =~ '_([[:digit:]]+)' ]] && num=$match[1]