Переменные bash: различия между версиями
Дым (обсуждение | вклад) Нет описания правки |
Дым (обсуждение | вклад) Нет описания правки |
||
(не показано 85 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
Всякий раз вспоминая, как можно выудить часть bash-переменной без разбиения её вызовом команд, гуглил что-то вроде [https://guide.bash.academy/expansions/ этой] статьи. | Всякий раз вспоминая, как можно выудить часть bash-переменной без разбиения её вызовом команд, гуглил что-то вроде [https://https://guide.bash.academy/expansions/ этой] статьи. | ||
Дабы больше не искать, решил перевести сюда тот самый блок, ради которого всё затевалось, слегка его дополнив. | |||
{|class="wikitable" | {|class="wikitable" | ||
|+<strong> | |+<strong>Манипуляции с переменными</strong> | ||
|- | |- | ||
! | !colspan=2|Действие!!Оператор!!Пример!!Результат | ||
|-${!VAR[@]} | |||
!style="writing-mode:vertical-lr;transform:rotate(180deg)"|(нет) | |||
|Переменная '''по умолчанию''' | |||
|<pre>${переменная:-умолчание}</pre> | |||
|<code>"${VAR:<span style="background-color:yellow">-</span>default}"</code> | |||
|style="text-align:center"|unset <s><span style="background-color:yellow">VAR</span></s> | |||
↓<br/> | |||
default | |||
|- | |- | ||
|<code>${переменная | !rowspan=3 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Счёт… | ||
|…'''каждого''' элемента в массиве<br/>(удобно для цикла <code>for</code>) | |||
|<code>"${ | |<pre>${!переменная[@]}</pre> | ||
|style="text-align:center"|< | |<code>"${<span style="background-color:yellow">!</span>VAR[@]}"</code> | ||
|style="text-align:center"|(<span style="background-color:yellow">массив из скольки-то элементов</span>) | |||
↓<br/> | |||
0 1 2 3 | |||
|- | |- | ||
|< | |…'''числа''' элементов в массиве | ||
|<pre>${#переменная[@]}</pre> | |||
|<code>"${ | |<code>"${<span style="background-color:yellow">#</span>VAR[@]}"</code> | ||
|style="text-align:center"|< | |style="text-align:center"|(<span style="background-color:yellow">массив из скольки-то элементов</span>) | ||
↓<br/> | |||
4 | |||
|- | |- | ||
|< | |…числа '''символов''' в переменной | ||
|<pre>${#переменная}</pre> | |||
|<code>"${ | |<code>"${<span style="background-color:yellow">#</span>VAR}"</code> | ||
|style="text-align:center"|https:// | |style="text-align:center"|https://www.altlinux.org/index.php | ||
↓<br/> | |||
34 | |||
|- | |- | ||
|<code>${переменная%% | !rowspan=5 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Удаление… | ||
| | |…'''всех''' символов '''кроме''' части (не обязательно заданной длины) от символа: | ||
|<code>"${ | * №'''<начало>''' ''(по умолчанию — 0)'' или | ||
|style="text-align:center"|https:<s>// | * №'''< -конец>''' ''(пробел обязателен)'' | ||
< | |<pre> | ||
${переменная:[начало][:длина]} | |||
${переменная: -конец[:длина]} | |||
</pre> | |||
|<code>"${VAR:<span style="background-color:yellow">12</span>:<span style="background-color:yellow">8</span>}"</code></br> | |||
<code>"${VAR:<span style="background-color:yellow"> -22</span>:<span style="background-color:yellow">8</span>}"</code> | |||
|style="text-align:center"|<s><span style="background-color:yellow">https://www.</span></s>altlinux<s><span style="background-color:yellow">.org/index.php</span></s> | |||
↓<br/> | |||
altlinux | |||
|- | |||
|…'''кратчайшего''' совпадения с шаблоном '''в начале''' строки | |||
|<pre>${переменная#шаблон}</pre> | |||
|<code>"${VAR#<span style="background-color:yellow">*/</span>}"</code> | |||
|style="text-align:center"|<s><span style="background-color:yellow">https:/</span></s>/www.altlinux.org/index.php | |||
↓<br/> | |||
/www.altlinux.org/index.php | |||
|- | |||
|…'''длиннейшего''' совпадения с шаблоном '''в начале''' строки | |||
|<pre>${переменная##шаблон}</pre> | |||
|<code>"${VAR##<span style="background-color:yellow">*/</span>}"</code> | |||
|style="text-align:center"|<s><span style="background-color:yellow">https://www.altlinux.org/</span></s>index.php | |||
↓<br/> | |||
index.php | |||
|- | |||
|…'''кратчайшего''' совпадения с шаблоном '''в конце''' строки | |||
|<pre>${переменная%шаблон}</pre> | |||
|<code>"${VAR%<span style="background-color:yellow">/*</span>}"</code> | |||
|style="text-align:center"|https://www.altlinux.org<s><span style="background-color:yellow">/index.php</span></s> | |||
↓<br/> | |||
https://www.altlinux.org | |||
|- | |||
|…'''длиннейшего''' совпадения с шаблоном '''в конце''' строки | |||
|<pre>${переменная%%шаблон}</pre> | |||
|<code>"${VAR%%<span style="background-color:yellow">/*</span>}"</code> | |||
|style="text-align:center"|https:<s><span style="background-color:yellow">//www.altlinux.org/index.php</span></s> | |||
↓<br/> | |||
https: | https: | ||
|- | |- | ||
|< | !rowspan=6 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Замена… | ||
| | |…'''первого''' совпадения с шаблоном | ||
|<code>"${ | |<pre>${переменная/шаблон/заменитель}</pre> | ||
|style="text-align:center"|https:// | |<code>"${VAR/<span style="background-color:yellow">.</span>/<span style="background-color:yellow">-</span>}"</code> | ||
<br/>↓<br/> | |style="text-align:center"|https://www<span style="background-color:yellow">.</span>altlinux.org/index.php | ||
https:// | ↓<br/> | ||
https://www<span style="background-color:yellow">-</span>altlinux.org/index.php | |||
|- | |||
|…'''каждого''' совпадения с шаблоном | |||
|<pre>${переменная//шаблон/заменитель}</pre> | |||
|<code>"${VAR//<span style="background-color:yellow">.</span>/<span style="background-color:yellow">-</span>}"</code> | |||
|style="text-align:center"|https://www<span style="background-color:yellow">.</span>altlinux<span style="background-color:yellow">.</span>org/index<span style="background-color:yellow">.</span>php | |||
↓<br/> | |||
https://www<span style="background-color:yellow">-</span>altlinux<span style="background-color:yellow">-</span>org/index<span style="background-color:yellow">-</span>php | |||
|- | |||
|…шаблона '''в начале''' строки | |||
|<pre>${переменная/#шаблон/заменитель}</pre> | |||
|<code>"${VAR/#<span style="background-color:yellow">*:</span>/<span style="background-color:yellow">ftp:</span>}"</code> | |||
|style="text-align:center"|<span style="background-color:yellow">https:</span>//www.altlinux.org/index.php | |||
↓<br/> | |||
<span style="background-color:yellow">ftp:</span>//www.altlinux.org/index.php | |||
|- | |||
|…шаблона '''в конце''' строки | |||
|<pre>${переменная/%шаблон/заменитель}</pre> | |||
|<code>"${VAR/%<span style="background-color:yellow">.php</span>/<span style="background-color:yellow">.jpg</span>}"</code> | |||
|style="text-align:center"|https://www.altlinux.org/index<span style="background-color:yellow">.php</span> | |||
↓<br/> | |||
https://www.altlinux.org/index<span style="background-color:yellow">.jpg</span> | |||
|- | |||
|…регистра: | |||
*только для '''первого''' символа | |||
*либо для '''всех''' символов (из шаблона или '''вообще''') | |||
|<pre>${переменная[^|,][^^|,,[шаблон]]}</pre> | |||
|<code>"${VAR^^<span style="background-color:yellow">[ht]</span>}"</code> | |||
|style="text-align:center"|<span style="background-color:yellow">htt</span>ps://www.altlinux.org/index.p<span style="background-color:yellow">h</span>p | |||
↓<br/> | |||
<span style="background-color:yellow">HTT</span>ps://www.altlinux.org/index.p<span style="background-color:yellow">H</span>p | |||
|- | |- | ||
|< | |…'''одной''' переменной '''значением''' из '''другой''' | ||
|<pre>${!переменная}</pre> | |||
|<code>"${ | |<code>"${<span style="background-color:yellow">!</span>VAR}"</code> | ||
|style="text-align:center"| | |style="text-align:center"|MSG=TEXT; TEXT="<span style="background-color:yellow">Some info</span>";<br/>echo "${MSG} = ${<span style="background-color:yellow">!</span>MSG}" | ||
↓<br/> | |||
TEXT = Some info | |||
|} | |} | ||
=Обратная связь= | |||
*[https://t.me/gbIMoBou @gbIMoBou] | |||
*[[Участник:Дым#Заметки|Другие статьи]] | |||
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}} | ||
[[Категория:Admin]] | [[Категория:Admin]] |
Текущая версия от 06:41, 29 ноября 2023
Всякий раз вспоминая, как можно выудить часть 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/.jpg}"
|
https://www.altlinux.org/index.php | |
…регистра:
|
${переменная[^|,][^^|,,[шаблон]]} |
"${VAR^^[ht]}"
|
https://www.altlinux.org/index.php
↓ | |
…одной переменной значением из другой | ${!переменная} |
"${!VAR}"
|
MSG=TEXT; TEXT="Some info"; echo "${MSG} = ${!MSG}" ↓ |