Quando você faz
NOW='date '+%F_%H:%M:%S''
ou, usando uma sintaxe mais moderna,
NOW=$( date '+%F_%H:%M:%S' )
a variável NOW
será definida para a saída do comando date
no momento em que a linha é executada. Se você fizer isso em ~/.bashrc
, então $NOW
será um timestamp que informa quando você iniciou a sessão atual do shell interativo.
No script que você está mostrando, a variável NOW
está sendo definida quando o script é executado (é isso que você quer).
Quando o assigment
filename="/home/pi/gets/$NOW.jpg"
é realizado, o shell expandirá a variável na string. Ele faz isso mesmo que esteja entre aspas duplas. Aspas simples param o shell de expandir as variáveis incorporadas (isto é não o que você quer neste caso).
Note que você não parece realmente usar a variável filename
na chamada para raspistill
, então eu não tenho certeza porque você definiu seu valor, a menos que você apenas queira que ele seja mostrado por echo
em o fim.
No restante do código, você deve colocar aspas duplas na expansão da variável $NOW
(e $filename
). Se você não fizer isso e depois alterar como você define NOW
para que inclua espaços ou curingas (padrões de globalização de nomes de arquivo), os comandos que usam $NOW
podem falhar ao analisar sua linha de comando corretamente.
Compare, por exemplo,
string="hello * there"
printf 'the string is "%s"\n' $string
com
string="hello * there"
printf 'the string is "%s"\n' "$string"
Itens relacionados:
-
Sobre os backticks nas substituições de comandos: Os backticks (ou seja, 'cmd') nas shells * sh foram preteridos?
-
Sobre como citar expansões de variáveis: Implicações de segurança de esquecer de citar uma variável em shells bash / POSIX e Por que meu script de shell sufoca em espaços em branco ou outros caracteres especiais?