Como gerenciar a expansão de variáveis ​​vazias ou não definidas

Como gerenciar a expansão de variáveis ​​vazias ou não definidas

Objetivo

O objeto deste tutorial é aprender a modificar o comportamento do bash ao expandir variáveis ​​não fixadas ou vazias usando sintaxe dedicada.

Requisitos

  • Não são necessários privilégios especiais do sistema para seguir este tutorial

Introdução

A expansão das variáveis ​​é uma das características mais comuns usadas no shell: quando existe uma variável e faz parte de um comando, é "expandida", de modo que é substituído pelo seu valor. A expansão de variáveis ​​vazias é uma dessas coisas que, se não for bem gerenciada, pode causar danos graves a um sistema: imagine um comando como este:

$ sudo rm -rf "/$ dir"

Em um caso como este, se o $ dir A variável está vazia ou não definida, sua expansão não produziria valor; portanto, o comando executado real seria:

$ sudo rm -rf /

Nosso sistema estaria condenado. Lidar ou melhor impedir uma situação como essa é de vital importância. Neste tutorial, veremos como gerenciar a expansão de variáveis ​​vazias usando algumas sintaxes específicas da Bash.



Use um valor padrão se uma variável estiver vazia ou não definida

O primeiro caso que levamos em consideração é quando uma variável não definida ou vazia é referenciada em uma expansão e queremos usar um valor de fallback/padrão em seu lugar. Suponha que estamos referenciando o inexistente $ color variável como parte do seguinte comando:

$ echo "O céu é $ cor"

O resultado deste comando seria:

o céu é

Como esperado, como a variável não está definida, nada resulta de sua expansão, deixando -nos com uma frase inacabada (e um céu sem cor). Nenhum mal real neste caso, é claro, mas como poderíamos instruir o shell a usar um valor padrão em um caso como este?

Há uma sintaxe projetada especificamente para obter esse comportamento, e é muito simples:

$ parâmetro: -word

Aqui está como funciona:

$ echo "O céu é $ color:-" azul "" o céu é azul 

Ao usar esta sintaxe, se parâmetro não existe ou está vazio, a expansão resultará no valor de palavra. Nesse caso, a variável $ color não foi definido, portanto a concha usou "azul" como resultado da expansão.

Vale a pena notar que, mesmo que a expansão resultasse no valor especificado como um "padrão", com essa sintaxe, após a expansão ocorrer, o $ color A variável ainda estará sem serem definidas:

$ echo "$ cor" 

Use e também atribua um novo valor se uma variável estiver vazia ou não definida

O comando acima retornou sem saída, já que a variável, naquele momento, ainda não foi definida. E se quisermos usar um valor especificado ao expandir uma variável não fixada ou vazia, mas também atribua esse valor à variável após a expansão? Uma sintaxe ligeiramente diferente, vamos alcançar o que queremos:

$ parâmetro: = word

Vamos ver um exemplo no qual essa sintaxe é usada:

$ echo "O céu é $ color: =" Blue "" O céu é azul 

Assim como aconteceu antes, palavra tem sido usado na expansão, pois parâmetro (o $ color variável) não foi definido. Além disso, palavra, ("Azul" neste caso), também foi atribuído como o valor para a variável anteriormente não definida. Verificando que é muito fácil:

$ "O céu é $ cor" o céu é azul 

Ver? A expansão do $ color A variável agora resulta em "azul".



Use um valor alternativo se uma variável estiver definida

Uma sintaxe ligeiramente diferente, vamos obter um resultado ainda diferente, aqui está:

parâmetro:+word

Como isso modifica o comportamento da concha? Quando esta sintaxe é usada, se parâmetro está vazio ou não está definido, palavra vai não ser usado, portanto a expansão estará vazia. Se, em vez disso, a variável tiver um valor, o resultado da expansão será palavra, e o valor de parâmetro não será alterado. Vamos esclarecer isso com alguns exemplos:

Primeiro caso. A variável $ color não está definido, portanto, o resultado da expansão não será nada:

$ echo "O céu é $ color:+" azul "" o céu é 

Segundo caso. A variável $ color tem um valor: a expansão resultará no valor especificado ao direito de :+, Mas o valor do $ color A variável não será alterada:

# Atribua um valor à variável "color" $ color = "vermelho" # Como a variável está definida, o resultado da expansão será "azul" $ echo "O céu é $ color:+" Blue "" o O céu é azul # o valor da variável "cor" não foi alterado $ echo "$ color" vermelho 
cópia de

Exibir uma mensagem de erro se uma variável estiver vazia ou não definida

O último tipo de sintaxe que examinaremos aqui é:

$ parâmetro:?palavra

Ao usar esta sintaxe, se parâmetro não está definido ou vazio, o script sairá com erro. Além disso, palavra será enviado para stderr (erro padrão). Para o bem deste exemplo, considere a variável "cor" sem serem definidos como antes:

# A mensagem que especificamos é exibida no erro padrão $ echo "O céu é $ color:?"Cor não definido" "BASH: cor: cor não definida 
cópia de

O comando saiu com erro e o cor não definida a mensagem foi exibida. Caso a variável tenha sido definida, o resultado da expansão seria seu próprio valor:

$ color = "azul" $ echo "O céu é $ color:?"cor não definido" "O céu é azul 
cópia de

Tutoriais do Linux relacionados:

  • Sistema Linux Hung? Como escapar para a linha de comando e…
  • Variáveis ​​de bash especiais com exemplos
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes
  • Script de bash: verifique se o diretório existe
  • Coisas para fazer depois de instalar o Ubuntu 22.04 Jellyfish…
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Comandos Linux: os 20 comandos mais importantes que você precisa para…
  • Como gerenciar a história da Bash
  • Ubuntu 20.04 Guia