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

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
 
(не показаны 83 промежуточные версии этого же участника)
Строка 1: Строка 1:
Всякий раз вспоминая, как можно выудить часть bash-переменной без разбиения её вызовом команд, гуглил что-то вроде [https://guide.bash.academy/expansions/ этой] статьи.
Всякий раз вспоминая, как можно выудить часть bash-переменной без разбиения её вызовом команд, гуглил что-то вроде [https://https://guide.bash.academy/expansions/ этой] статьи.
Чтобы в дальнейшем искать не приходилось, решил перевести сюда тот самый блок, ради которого всё затевалось.
 
Дабы больше не искать, решил перевести сюда тот самый блок, ради которого всё затевалось, слегка его дополнив.
{|class="wikitable"
{|class="wikitable"
|+<strong>Разберём оперирование переменными на примере строки <code>url='https://guide.bash.academy/variables.html'</code>.</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>${переменная#образец}</code>
!rowspan=3 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Счёт…
|Удаление ''кратчайшего'' куска, совпадающего с образцом '''в начале''' строки.
|…'''каждого''' элемента в массиве<br/>(удобно для цикла <code>for</code>)
|<code>"${url#*/}"</code>
|<pre>${!переменная[@]}</pre>
|style="text-align:center"|<span style="background-color:yellow">https:/</span>/guide.bash.academy/variables.html
|<code>"${<span style="background-color:yellow">!</span>VAR[@]}"</code>
|style="text-align:center"|(<span style="background-color:yellow">массив из скольки-то элементов</span>)
↓<br/>
↓<br/>
/guide.bash.academy/variables.html
0 1 2 3
|-
|-
|<code>${переменная##образец}</code>
|…'''числа''' элементов в массиве
|Удаление ''длиннейшего'' куска, совпадающего с образцом '''в начале''' строки.
|<pre>${#переменная[@]}</pre>
|<code>"${url##*/}"</code>
|<code>"${<span style="background-color:yellow">#</span>VAR[@]}"</code>
|style="text-align:center"|<span style="background-color:yellow">https://guide.bash.academy/</span>variables.html
|style="text-align:center"|(<span style="background-color:yellow">массив из скольки-то элементов</span>)
↓<br/>
↓<br/>
variables.html
4
|-
|-
|<code>${переменная%образец}</code>
|…числа '''символов''' в переменной
|Удаление ''кратчайшего'' куска, совпадающего с образцом '''в конце''' строки.
|<pre>${#переменная}</pre>
|<code>"${url%/*}"</code>
|<code>"${<span style="background-color:yellow">#</span>VAR}"</code>
|style="text-align:center"|https://guide.bash.academy<span style="background-color:yellow">/variables.html</span>
|style="text-align:center"|https://www.altlinux.org/index.php
↓<br/>
↓<br/>
https://guide.bash.academy
34
|-
|-
|<code>${переменная%%образец}</code>
!rowspan=5 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Удаление…
|Удаление ''длиннейшего'' куска, совпадающего с образцом '''в конце''' строки.
|…'''всех''' символов '''кроме''' части (не обязательно заданной длины) от символа:
|<code>"${url%%/*}"</code>
* №'''<начало>''' ''(по умолчанию — 0)'' или
|style="text-align:center"|https:<span style="background-color:yellow">//guide.bash.academy/variables.html</span>
* №'''< -конец>''' ''(пробел обязателен)''
|<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/>
↓<br/>
https:
https:
|-
|-
|<code>${переменная/образец/заменитель}</code>
!rowspan=6 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Замена…
|Замена ''первого'' вхождения, совпадающего с образцом.
|…'''первого''' совпадения с шаблоном
|<code>"${url/./-}"</code>
|<pre>${переменная/шаблон/заменитель}</pre>
|style="text-align:center"|https://guide<span style="background-color:yellow">.</span>bash.academy/variables.html
|<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.org/index.php
↓<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/>
↓<br/>
https://guide<span style="background-color:yellow">-</span>bash.academy/variables.html
<span style="background-color:yellow">HTT</span>ps://www.altlinux.org/index.p<span style="background-color:yellow">H</span>p
|-
|-
|<code>${переменная//образец/заменитель}</code>
|…'''одной''' переменной '''значением''' из '''другой'''
|Замена ''каждого'' вхождения, совпадающего с образцом.
|<pre>${!переменная}</pre>
|<code>"${url//./-}"</code>
|<code>"${<span style="background-color:yellow">!</span>VAR}"</code>
|style="text-align:center"|https://guide<span style="background-color:yellow">.</span>bash<span style="background-color:yellow">.</span>academy/variables<span style="background-color:yellow">.</span>html
|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/>
↓<br/>
https://guide<span style="background-color:yellow">-</span>bash<span style="background-color:yellow">-</span>academy/variables<span style="background-color:yellow">-</span>html
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 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

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