Este é o roteiro:
#!/bin/bash
thedate=$(date)
var='Current date is $thedate'
echo $var
A saída é A data atual é $thedate e gostaria que mostrasse a data, o que fiz de errado? Qualquer ajuda seria apreciada.
Responder1
O problema é que bash
expande as variáveis de ambiente apenas uma vez, a menos que você use o eval
, o que faz com que a linha de comando seja analisada duas vezes:
eval echo $var
Observe que a data e a hora exibidas são as atuais quando thedate
estão definidas e não quando $var
são referenciadas. Para exibir a hora atual quando $var
é referenciada, você precisa: –
var='Current date is $(date)'
eval echo $var
Seria melhor não usar variáveis, mas definir uma função:-
cdate() { echo Current date is $(date); }
...
cdate
Claro, é melhor ainda não usar echo
, mas deixe date
-se adicionar o texto extra:
cdate() { date +"Current date is %c"; }
Isso não produz exatamente o mesmo formato do date
padrão, mas não há especificador de formato para o padrão.
Responder2
var='Current date is $thedate'
As variáveis não se expandem entre aspas simples, então isso atribui uma string contendo o literal text $thedate
. Você deve usar aspas duplas aqui para expandir a variável.
echo $var
Além disso, aqui, você deve usar aspas duplas ao redor da variável para evitar que ela esteja sujeita à divisão de palavras e expansão do nome do caminho, ou seja echo "$var"
, . Nesse caso específico, você pode evitar o uso de aspas, pois a data provavelmente não conterá caracteres curinga. Mas sem aspas, por exemplo, a sequência de data Fri Dec 7 20:41:21 EET 2018
seria exibida como Fri Dec 7 20:41:21 EET 2018
, ou seja, o espaço duplo após o nome do mês seria reduzido a um único espaço.
Responder3
Use aspas duplas em vez de aspas simples. O Bash não expandirá variáveis quando estiver entre aspas simples.