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

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
(не показаны 44 промежуточные версии этого же участника)
Строка 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>
|-
|-
!&nbsp;!!Оператор!!Описание!!Пример!!Результат
!colspan=2|Действие!!Оператор!!Пример!!Результат
|-${!array[@]}
!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
|-
|-
!style="writing-mode:vertical-lr;transform:rotate(180deg)"|Длина
!rowspan=3 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Счёт…
|…'''элементов''' массива (удобно для цикла <code>for</code>)
|<pre>${!переменная[@]}</pre>
|<code>"${<span style="background-color:yellow">!</span>array[@]}"</code>
|style="text-align:center"|(<span style="background-color:yellow">some content of our array</span>)
↓<br/>
0 1 2 3 4
|-
|…'''числа''' элементов в массиве
|<pre>${#переменная[@]}</pre>
|<code>"${<span style="background-color:yellow">#</span>array[@]}"</code>
|style="text-align:center"|(<span style="background-color:yellow">some content of our array</span>)
↓<br/>
5
|-
|…числа '''символов''' в переменной
|<pre>${#переменная}</pre>
|<pre>${#переменная}</pre>
|Число символов в переменной
|<code>"${<span style="background-color:yellow">#</span>VAR}"</code>
|<code>"${<span style="background-color:yellow">#</span>url}"</code>
|style="text-align:center"|https://www.altlinux.org/index.php
|style="text-align:center"|https://guide.bash.academy/variables.html
↓<br/>
↓<br/>
41
34
|-
|-
!rowspan=5 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Удаление
!rowspan=5 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Удаление…
|…'''всех''' символов '''кроме''' части (не обязательно заданной длины) от символа:
* №'''<начало>''' ''(по умолчанию — 0)'' или
* №'''< -конец>''' ''(пробел обязателен)''
|<pre>
|<pre>
${переменная:начало[:длина]}
${переменная:[начало][:длина]}
${переменная: -конец[:длина]}
${переменная: -конец[:длина]}
</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>
|<code>"${url:<span style="background-color:yellow"> -33</span>:<span style="background-color:yellow">5</span>}}"</code>
|style="text-align:center"|<s><span style="background-color:yellow">https://</span></s>guide<s><span style="background-color:yellow">.bash.academy/variables.html</span></s>
↓<br/>
↓<br/>
guide
altlinux
|-
|-
|…'''кратчайшего''' совпадения с шаблоном '''в начале''' строки
|<pre>${переменная#шаблон}</pre>
|<pre>${переменная#шаблон}</pre>
|Удаление '''кратчайшего''' совпадения с шаблоном '''в начале''' строки
|<code>"${VAR#<span style="background-color:yellow">*/</span>}"</code>
|<code>"${url#<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
|style="text-align:center"|<s><span style="background-color:yellow">https:/</span></s>/guide.bash.academy/variables.html
↓<br/>
↓<br/>
/guide.bash.academy/variables.html
/www.altlinux.org/index.php
|-
|-
|…'''длиннейшего''' совпадения с шаблоном '''в начале''' строки
|<pre>${переменная##шаблон}</pre>
|<pre>${переменная##шаблон}</pre>
|Удаление '''длиннейшего''' совпадения с шаблоном '''в начале''' строки
|<code>"${VAR##<span style="background-color:yellow">*/</span>}"</code>
|<code>"${url##<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
|style="text-align:center"|<s><span style="background-color:yellow">https://guide.bash.academy/</span></s>variables.html
↓<br/>
↓<br/>
variables.html
index.php
|-
|-
|…'''кратчайшего''' совпадения с шаблоном '''в конце''' строки
|<pre>${переменная%шаблон}</pre>
|<pre>${переменная%шаблон}</pre>
|Удаление '''кратчайшего''' совпадения с шаблоном '''в конце''' строки
|<code>"${VAR%<span style="background-color:yellow">/*</span>}"</code>
|<code>"${url%<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>
|style="text-align:center"|https://guide.bash.academy<s><span style="background-color:yellow">/variables.html</span></s>
↓<br/>
↓<br/>
https://guide.bash.academy
https://www.altlinux.org
|-
|-
|…'''длиннейшего''' совпадения с шаблоном '''в конце''' строки
|<pre>${переменная%%шаблон}</pre>
|<pre>${переменная%%шаблон}</pre>
|Удаление '''длиннейшего''' совпадения с шаблоном '''в конце''' строки
|<code>"${VAR%%<span style="background-color:yellow">/*</span>}"</code>
|<code>"${url%%<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>
|style="text-align:center"|https:<s><span style="background-color:yellow">//guide.bash.academy/variables.html</span></s>
↓<br/>
↓<br/>
https:
https:
|-
|-
!rowspan=5 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Замена
!rowspan=5 style="writing-mode:vertical-lr;transform:rotate(180deg)"|Замена…
|…'''первого''' совпадения с шаблоном
|<pre>${переменная/шаблон/заменитель}</pre>
|<pre>${переменная/шаблон/заменитель}</pre>
|Замена '''первого''' совпадения с шаблоном
|<code>"${VAR/<span style="background-color:yellow">.</span>/<span style="background-color:yellow">-</span>}"</code>
|<code>"${url/<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
|style="text-align:center"|https://guide<span style="background-color:yellow">.</span>bash.academy/variables.html
↓<br/>
↓<br/>
https://guide<span style="background-color:yellow">-</span>bash.academy/variables.html
https://www<span style="background-color:yellow">-</span>altlinux.org/index.php
|-
|-
|…'''каждого''' совпадения с шаблоном
|<pre>${переменная//шаблон/заменитель}</pre>
|<pre>${переменная//шаблон/заменитель}</pre>
|Замена '''каждого''' совпадения с шаблоном
|<code>"${VAR//<span style="background-color:yellow">.</span>/<span style="background-color:yellow">-</span>}"</code>
|<code>"${url//<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
|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
↓<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
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>
|<pre>${переменная/#шаблон/заменитель}</pre>
|Замена шаблона '''в начале''' строки
|<code>"${VAR/#<span style="background-color:yellow">*:</span>/<span style="background-color:yellow">ftp:</span>}"</code>
|<code>"${url/#<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
|style="text-align:center"|<span style="background-color:yellow">https:</span>//guide.bash.academy/variables.html
↓<br/>
↓<br/>
<span style="background-color:yellow">ftp:</span>//guide.bash.academy/variables.html
<span style="background-color:yellow">ftp:</span>//www.altlinux.org/index.php
|-
|-
|…шаблона '''в конце''' строки
|<pre>${переменная/%шаблон/заменитель}</pre>
|<pre>${переменная/%шаблон/заменитель}</pre>
|Замена шаблона '''в конце''' строки
|<code>"${VAR/%<span style="background-color:yellow">.php</span>/<span style="background-color:yellow">.jpg</span>}"</code>
|<code>"${url/%<span style="background-color:yellow">.html</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>
|style="text-align:center"|https://guide.bash.academy/variables<span style="background-color:yellow">.html</span>
↓<br/>
↓<br/>
https://guide.bash.academy/variables<span style="background-color:yellow">.jpg</span>
https://www.altlinux.org/index<span style="background-color:yellow">.jpg</span>
|-
|-
|<pre>${переменная[^|,][^^|,,[шаблон]]}</pre>
|…регистра:
|Замена регистра:
*только для '''первого''' символа
*только для '''первого''' символа
*либо для '''всех''' символов (из шаблона или '''вообще''')
*либо для '''всех''' символов (из шаблона или '''вообще''')
|<code>"${url^^<span style="background-color:yellow">[ht]</span>}"</code>
|<pre>${переменная[^|,][^^|,,[шаблон]]}</pre>
|style="text-align:center"|<span style="background-color:yellow">htt</span>ps://guide.bas<span style="background-color:yellow">h</span>.academy/variables.<span style="background-color:yellow">ht</span>ml
|<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/>
<span style="background-color:yellow">HTT</span>ps://guide.bas<span style="background-color:yellow">H</span>.academy/variables.<span style="background-color:yellow">HT</span>ml
<span style="background-color:yellow">HTT</span>ps://www.altlinux.org/index.p<span style="background-color:yellow">H</span>p
|}
|}
=Обратная связь=
*[https://t.me/gbIMoBou @gbIMoBou]
*[[Участник:Дым#Заметки|Другие статьи]]
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
[[Категория:Admin]]
[[Категория:Admin]]

Версия от 05:33, 14 июля 2022

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

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

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


default

Счёт… элементов массива (удобно для цикла for)
${!переменная[@]}
"${!array[@]}" (some content of our array)


0 1 2 3 4

числа элементов в массиве
${#переменная[@]}
"${#array[@]}" (some content of our array)


5

…числа символов в переменной
${#переменная}
"${#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

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