Переменные bash: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
 
(не показаны 3 промежуточные версии этого же участника)
Строка 6: Строка 6:
|-
|-
!colspan=2|Действие!!Оператор!!Пример!!Результат
!colspan=2|Действие!!Оператор!!Пример!!Результат
|-${!array[@]}
|-${!VAR[@]}
!style="writing-mode:vertical-lr;transform:rotate(180deg)"|(нет)
!style="writing-mode:vertical-lr;transform:rotate(180deg)"|(нет)
|Переменная '''по умолчанию'''
|Переменная '''по умолчанию'''
Строка 16: Строка 16:
|-
|-
!rowspan=3 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Счёт…
!rowspan=3 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Счёт…
|…'''элементов''' массива<br/>(удобно для цикла <code>for</code>)
|…'''каждого''' элемента в массиве<br/>(удобно для цикла <code>for</code>)
|<pre>${!переменная[@]}</pre>
|<pre>${!переменная[@]}</pre>
|<code>"${<span style="background-color:yellow">!</span>array[@]}"</code>
|<code>"${<span style="background-color:yellow">!</span>VAR[@]}"</code>
|style="text-align:center"|(<span style="background-color:yellow">some content of our array</span>)
|style="text-align:center"|(<span style="background-color:yellow">массив из скольки-то элементов</span>)
↓<br/>
↓<br/>
0 1 2 3 4
0 1 2 3
|-
|-
|…'''числа''' элементов в массиве
|…'''числа''' элементов в массиве
|<pre>${#переменная[@]}</pre>
|<pre>${#переменная[@]}</pre>
|<code>"${<span style="background-color:yellow">#</span>array[@]}"</code>
|<code>"${<span style="background-color:yellow">#</span>VAR[@]}"</code>
|style="text-align:center"|(<span style="background-color:yellow">some content of our array</span>)
|style="text-align:center"|(<span style="background-color:yellow">массив из скольки-то элементов</span>)
↓<br/>
↓<br/>
5
4
|-
|-
|…числа '''символов''' в переменной
|…числа '''символов''' в переменной

Текущая версия от 06:41, 29 ноября 2023

Всякий раз вспоминая, как можно выудить часть bash-переменной без разбиения её вызовом команд, гуглил что-то вроде этой статьи.

Дабы больше не искать, решил перевести сюда тот самый блок, ради которого всё затевалось, слегка его дополнив.

Манипуляции с переменными
Действие Оператор Пример Результат
(нет) Переменная по умолчанию
${переменная:-умолчание}
"${VAR:-default}" unset VAR


default

Счёт… каждого элемента в массиве
(удобно для цикла for)
${!переменная[@]}
"${!VAR[@]}" (массив из скольки-то элементов)


0 1 2 3

числа элементов в массиве
${#переменная[@]}
"${#VAR[@]}" (массив из скольки-то элементов)


4

…числа символов в переменной
${#переменная}
"${#VAR}" https://www.altlinux.org/index.php


34

Удаление… всех символов кроме части (не обязательно заданной длины) от символа:
  • <начало> (по умолчанию — 0) или
  • < -конец> (пробел обязателен)
${переменная:[начало][:длина]}
${переменная: -конец[:длина]}
"${VAR:12:8}"

"${VAR: -22:8}"

https://www.altlinux.org/index.php


altlinux

кратчайшего совпадения с шаблоном в начале строки
${переменная#шаблон}
"${VAR#*/}" https://www.altlinux.org/index.php


/www.altlinux.org/index.php

длиннейшего совпадения с шаблоном в начале строки
${переменная##шаблон}
"${VAR##*/}" https://www.altlinux.org/index.php


index.php

кратчайшего совпадения с шаблоном в конце строки
${переменная%шаблон}
"${VAR%/*}" https://www.altlinux.org/index.php


https://www.altlinux.org

длиннейшего совпадения с шаблоном в конце строки
${переменная%%шаблон}
"${VAR%%/*}" https://www.altlinux.org/index.php


https:

Замена… первого совпадения с шаблоном
${переменная/шаблон/заменитель}
"${VAR/./-}" https://www.altlinux.org/index.php


https://www-altlinux.org/index.php

каждого совпадения с шаблоном
${переменная//шаблон/заменитель}
"${VAR//./-}" https://www.altlinux.org/index.php


https://www-altlinux-org/index-php

…шаблона в начале строки
${переменная/#шаблон/заменитель}
"${VAR/#*:/ftp:}" https://www.altlinux.org/index.php


ftp://www.altlinux.org/index.php

…шаблона в конце строки
${переменная/%шаблон/заменитель}
"${VAR/%.php/.jpg}" https://www.altlinux.org/index.php


https://www.altlinux.org/index.jpg

…регистра:
  • только для первого символа
  • либо для всех символов (из шаблона или вообще)
${переменная[^|,][^^|,,[шаблон]]}
"${VAR^^[ht]}" https://www.altlinux.org/index.php


HTTps://www.altlinux.org/index.pHp

одной переменной значением из другой
${!переменная}
"${!VAR}" MSG=TEXT; TEXT="Some info";
echo "${MSG} = ${!MSG}"


TEXT = Some info

Обратная связь