GNU/Linux >> Znalost Linux >  >> Linux

Neobvyklé způsoby použití proměnných uvnitř Bash skriptů

Pravděpodobně jste si vědomi proměnných ve skriptování shellu Bash.

Stejně jako ostatní programovací a skriptovací jazyky používáte proměnné k ukládání dat a později na ně odkazujete v budoucích příkazech.

name="Linux Handbook"
echo "Hello $name!"

A vypíše "Hello Linux Handbook!".

Kromě výše uvedeného příkladu je také překvapivě velké množství věcí, které můžete s proměnnými dělat, jako je vyplnění výchozí hodnoty, když proměnná není nastavena, a přiřazení více hodnot jedné proměnné.

Dovolte mi ukázat vám toto neobvyklé a pokročilé použití proměnných ve skriptování bash.

Použití polí

S výjimkou výše uvedeného příkladu jsou nejběžnějším typem proměnné, kterou v Bash najdete, pole:

name=("Linux Handbook" "It's FOSS")

Výše uvedený příklad přiřazuje obě Linux Handbook a It's FOSS jako hodnoty pro name proměnná.

Jak však přistupujete ke každé hodnotě?

Pokud spustíte echo $name , uvidíte, že vypíše první hodnotu, Linux Handbook . Chcete-li získat přístup k ostatním hodnotám, budete muset pro proměnné použít jinou syntaxi.

Chcete-li začít vytahovat další hodnoty, začněme seznámením se s následujícím:

echo "Hello ${name}!"

Toto je základ toho, co vám umožní získat všechny hodnoty proměnné, a také to, co vám umožní provádět zbývající metody interakce s proměnnými ve zbytku tohoto článku.

Vraťme se k výše uvedenému příkladu a můžete použít ${variable[number]} syntaxe pro vytažení určité položky z proměnné:

echo "Hello ${name[1]}!"

Na tomto se vytiskne "Hello It's FOSS!"

Pokud jste z výše uvedeného příkladu již neviděli, první položka v poli ve skutečnosti začíná na 0 namísto 1.

Takže vytáhněte Linux Handbook hodnotu, vytáhli byste položku na pozici 0:

echo "Hello ${name[0]}!"

Podobně jednoduše vynecháte [number] part jednoduše nastaví jako výchozí první položku v poli (která je na indexu 0).

Index znamená pouze pozici položky v poli. Podobně index 0 je položka 0 uvnitř pole.

A ty tvoří všechny typy proměnných, které ve skutečnosti najdete v Bash.

Pojďme nyní k tomu, jak můžete skutečně pracovat a upravovat výstup těchto proměnných, když je voláme.

Nastavení hodnoty, když proměnná není nastavena

Pokud proměnná není nastavena takto:

, můžete proměnnou nastavit jako výchozí zpět na určitý řetězec
${variable:-string}

Vezměte si tento příklad:

echo "Hello ${name:-nobody}!"

Protože proměnná name není nastaveno, bude výchozí hodnota nobody a výše uvedený příkaz vypíše "Ahoj nikdo!".

Pokud je proměnná nastavena předem, použije se její hodnota:

name="Linux Handbook"
echo "Hello ${name:-nobody}!"

Výše uvedený příkaz vytiskne „Hello Linux Handbook!“

Nastavení hodnoty, když proměnná je již nastaven

Můžete také nastavit proměnnou tak, aby vracela určitou hodnotu, když proměnná je soubor. To by způsobilo, že proměnná vypíše určitý řetězec, kdykoli je nastaven, a nevypíše nic, pokud tomu tak není.

Syntaxe této metody je podobná té předchozí, ale používá + znak namísto - .

${variable:+string}

Vezměte tento příklad, kde není nastaven název proměnné. Takže pro tuto proměnnou část nic nevypíše a výstup příkazu bude "Ahoj!"

echo "Hello ${name:+person}!"

Upravte výše uvedený příklad a nastavte proměnnou name . S touto speciální metodou nepoužije již nastavenou hodnotu a použije tu, kterou jste zadali.

name="Linux Handbook"
echo "Hello ${name:+person}!"

Výše uvedený příkaz vytiskne "Ahoj osobě!".

Pravděpodobně najdete více případů použití s ​​${variable:-string} syntaxe, jako některé z výhod ${variable:+string} lze již provést pomocí jiných nástrojů, jako je testování ([] ) operátor:

Nepřímé odkazy na proměnné

Následující příklad bude používat následující syntaxi:

${!variable}

Tento je o něco složitější v tom, jak funguje, ale dává smysl poté, co uvidíte, jak to funguje:

name="Linux Handbook"
variable="name"

echo "Hello ${!variable}!"

Vytiskne „Hello Linux Handbook“.

Ten ! znak před názvem proměnné způsobí nahrazení normálního názvu proměnné, ale poté použije název to s zkuste najít relevantní proměnnou.

Podobně:

  • variable je nahrazeno řetězcem name , za kterým následuje:
  • name je nahrazena svou hodnotou Linux Handbook .

Zjištění délky proměnné

Použijme předchozí metodu, ale vyměňme ! znak pro # :

${#variable}

Použití této metody vytiskne délku proměnné, ale bude se chovat mírně odlišně v závislosti na tom, zda je proměnná řetězec nebo pole.

Použití této syntaxe na řetězci způsobí, že proměnná bude nahrazena počtem znaků v řetězci.

variable="name"
echo "Length is ${#variable}."

Vytiskne 4. Ale na druhou stranu, použití na pole vypíše počet položek uvnitř pole, tj. velikost pole, která je zde 2.

variable=("name" "word")
echo "Length is ${#variable}."

Řetězce s malými a velkými písmeny

Nakonec můžete řetězec psát velkými a malými písmeny pomocí ^ a , operátory.

Ty zadáte na konec názvu proměnné takto:

# Capitalizes
${variable^}
${variable^^}

# Lowercases
${variable,}
${variable,,}

Jaký je rozdíl mezi poskytnutím jedné a dvou postav?

Poskytnutí pouze jednoho (tj. ${variable^} ) způsobí, že bude upraveno pouze první písmeno, zatímco poskytne dvě (${variable^^} ) způsobí úpravu celého řetězce.

Níže uvedený příklad vytiskne Name místo name :

variable="name"
echo "${variable^}"

Ale tento vytiskne NAME :

variable="name"
echo "${variable^^}"

Podobně můžete tisknout proměnné také malými písmeny.

Níže uvedený příklad vytiskne wIDEname :

variable="WIDEname"
echo "${variable,}"

A tento vytiskne widename :

variable="WIDEname"
echo "${variable,,}"

Zabalení

Toto jsou jen některé ze způsobů, jak můžete použít proměnné uvnitř Bash. V Bashově dokumentaci o expanzi proměnných můžete najít různé další způsoby interakce s proměnnými.

Máte nějaké dotazy ohledně toho, jak výše uvedené příklady fungovaly, nebo něco nefunguje správně? Neváhejte a zanechte cokoli v sekci komentářů níže.


Linux
  1. Zpracování chyb ve skriptech Bash

  2. Bash skriptování (I)

  3. Použít rozšíření .sh nebo .bash pro skripty Bash?

  1. Použít proměnné uvnitř rozšíření {} bez `eval`?

  2. Alias ​​s proměnnou v bash

  3. Exportujte proměnnou z bash a použijte ji v Pythonu

  1. Pět způsobů použití operátorů přesměrování v Bash

  2. Sdílení proměnných ve více skriptech Shell?

  3. bash - shoda proměnné bez ohledu na velikost písmen