Переменные bash
Всякий раз вспоминая, как можно выудить часть bash-переменной без её разбиения внешними командами, гуглил что-то вроде этой статьи.
Дабы больше не искать, решил перевести сюда тот самый блок, ради которого всё затевалось, слегка его компактифицировав, но притом и дополнив.
| Действие | Оператор | Пример | Результат | |
|---|---|---|---|---|
| (нет) | Переменная по умолчанию | ${переменная:-умолчание}
|
"${VAR:-default}"
|
unset ↓ |
| Счёт… | …каждого элемента в массиве (удобно для цикла for)
|
${!переменная[@]}
|
"${!VAR[@]}"
|
(массив из скольки-то элементов)
↓ |
| …числа элементов в массиве | ${#переменная[@]}
|
"${#VAR[@]}"
|
(массив из скольки-то элементов)
↓ | |
| …символов в переменной | ${#переменная}
|
"${#VAR}"
|
https://www.altlinux.org/index.php
↓ | |
| Удаление… | …всех символов кроме части (не обязательно заданной длины) от символа:
|
${переменная:[начало][:длина]}
${переменная: -конец[:длина]}
|
"${VAR:12:8}"
|
↓ |
| …кратчайшего совпадения с шаблоном в начале строки | ${переменная#шаблон}
|
"${VAR#*/}"
|
↓ | |
| …длиннейшего совпадения с шаблоном в начале строки | ${переменная##шаблон}
|
"${VAR##*/}"
|
↓ | |
| …кратчайшего совпадения с шаблоном в конце строки | ${переменная%шаблон}
|
"${VAR%/*}"
|
https://www.altlinux.org | |
| …длиннейшего совпадения с шаблоном в конце строки | ${переменная%%шаблон}
|
"${VAR%%/*}"
|
https: ↓ | |
| Замена… | …первого совпадения с шаблоном | ${переменная/шаблон/заменитель}
|
"${VAR/./-}"
|
https://www.altlinux.org/index.php
↓ |
| …каждого совпадения с шаблоном | ${переменная//шаблон/заменитель}
|
"${VAR//./-}"
|
https://www.altlinux.org/index.php
↓ | |
| …шаблона в начале строки | ${переменная/#шаблон/заменитель}
|
"${VAR/#*:/ftp:}"
|
https://www.altlinux.org/index.php
↓ | |
| …шаблона в конце строки | ${переменная/%шаблон/заменитель}
|
"${VAR/%.php/.htm}"
|
https://www.altlinux.org/index.php | |
…регистра:
|
${переменная[^|,][^^|,,[шаблон]]}
|
"${VAR^^[ht]}"
|
https://www.altlinux.org/index.php
↓ | |
| …одной переменной значением из другой | ${!переменная}
|
"${!VAR}"
|
MSG=TEXT; TEXT="Some info"; echo "${MSG} = ${!MSG}" ↓ | |