Como gerenciar a expansão de variáveis vazias ou não definidas
- 2180
- 439
- Mrs. Willie Beahan
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