De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Julio Cezar Neves
Data de Publicação: 28 de setembro de 2021
Vamos fazer:
$ Var1=cadeia
$ Var1=${Var1^}; echo $Var1 # Só a primeira letra Cadeia $ Var1=${Var1^^}; echo $Var1 # Todas as letras CADEIA
$ Var1=${Var1,,}; echo $Var1 # Todas as letras cadeia $ Var1=${Var1,}; echo $Var1 # Só a primeira letra cADEIA
$ Var1=${Var1~~}; echo $Var1 # Todas as letras Cadeia $ Var1=${Var1~}; echo $Var1 # Só a primeira letra cadeia
$ Nome=Hedy; SNome= # Nome tem dado e Snome não $ echo O nome é $Nome ${SNome:+ e o sobrenome é $SNome} O nome é Hedy $ SNome=Coutinho # Atribui valor a SNome $ echo O nome é $Nome ${SNome:+ e o sobrenome é $SNome} O nome é Hedy e o sobrenome é Coutinho
$ read -p "Login ($USER): " LN; LN=${LN:-$USER}; echo $LN Login (julio):julio $ read -p "Login ($USER): " LN; LN=${LN:-$USER}; echo $LN Login (julio): Botelho Botelho
No exemplo acima ofereci a variável de sistema $USER
como valor default
(entre parênteses). Na primeira execução dei <ENTER>
para aceitar este
valor e como você pode ver, a Expansão de Parâmetros botou na variável
$LN
, que estava vazia o valor de $USER
.
Ou seja, ao contrário da anterior, a expansão será realizada somente caso a
variável sendo monitorada não tenha valor e isso é sensacional para se oferecer
um valor que, caso confirmado com um <ENTER>
receberá o padrão (default).
Fazendo o mesmo, porém usando uma Expansão de Parâmetros semelhante:
$ read -p "Login ($USER): " LN; : ${LN:=$USER}; echo $LN
Login (julio):
julio
O comando :
que foi usado não faz nada e por isso é muito rápido e como as
Expansões de Parâmetros atuam como variáveis, elas sempre precisarão de um
comando ou de uma atribuição para serem "executadas".
Parecido com o dois anteriores (-
e =
), pois atua somente nos casos em que
o parâmetro é nulo ou não está declarado, quando então mandará uma mensagem
para a saída.
Se o parâmetro estiver valorado, seu conteúdo será simplesmente expandido, caso contrário seu texto será o prefixo de uma mensagem de erro.
Veja esse teste:
$ cat tst.sh
read -p "Deseja continuar? " Responda
: ${Responda:?(S)im ou (N)ão}
sleep 3
Se como resposta for teclado <ENTER>
sem informar nada, isto é, caso a
variável $Responda
permaneça vazia, a mensagem a seguir será exibida:
./tst.sh: linha 2: Responda: (S)im ou (N)ão
Após a execução desta expansão o programa abortará (e o sleep
não será
executado), o código de retorno ($?
) não terá um valor zero (0
), o que
possibilita continuar a monitoração do programa.
Um uso interessante desta técnica é para uma monitoração prévia do ambiente
do seu script. Suponha que ele necessite que alguma variável tenha sido
exportada para ele (vou usar a $PATH
como exemplo):
$ : ${PATH:?Impossível continuar,\ caminho dos arquivos não declarado}
Nos 4 últimos casos de Expansão de Parâmetros quando usamos dois pontos (:
) -
que não deve ser confundido com o comando :
- a Expansão de Parâmetros será
executada caso a variável não exista ou esteja vazia. Sem eles não haverá
expansão caso a variável exista, mesmo que esteja vazia.
$ Var= # Variável existe e está vazia $ echo --${Var-Não vazia}-- ---- $ echo --${Var:-Não vazia}-- --Não vazia--
Amanhã falaremos de algumas Expansões de Parâmetros que substituem o sed
, o tr
, o awk
, o cut
, o expr
, o basename
, o dirname
, ...
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários