%20e%20echo%20%22%24(cal)%22%20.png)
Estou usando echo $(cal)
e echo "$(cal)"
no Linux e me dá resultados diferentes como na foto. As aspas duplas não devem interferir $
neste caso, então o que dá echo "$(cal)"
aquele estilo horizontal comparando com echo $(cal)
.
Este é o resultado:
echo "$(cal)"
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
echo $(cal)
June 2019 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Responder1
Existem duas diferenças principais:
O shell executadivisão de palavrasno não citado
$(cal)
. Isso significa, assumindo um valor padrão paraIFS
, que todas as sequências de espaços em branco (incluindo novas linhas) serão substituídas por um único espaço em branco. Esta é a saída do comando sem aspas em uma única linha.Aqui está um exemplo mais simples:
$ s='line 1 > line 2' $ echo "$s" line 1 line 2 $ echo $s line 1 line 2
Como você pode ver, no segundo
echo
, aquele sem aspas duplas, todas as sequências de espaços em branco foram substituídas por espaços em branco simples. Isso é exatamente o que você viu ao usarecho
sem aspas duplas comecho $(cal)
.O shell executaexpansão do nome do caminhono resultado da palavra divisão. Isso não faz nenhuma diferença no seu exemplo, mas, se sua saída incluísse
?
ou*
outros caracteres glob-ativos, poderia levar a algumas surpresas.Aqui está um exemplo simples deexpansão do nome do caminho. Vamos começar com um diretório com três arquivos:
$ ls file1 file2 file3
Agora, vamos definir uma string: $ s='file?'
Agora, veja que
echo
com aspas duplas retorna nossa string, mas, sem aspas duplas, a string é expandida em nomes de arquivos:$ echo "$s" file? $ echo $s file1 file2 file3