~
é expandido apenas em alguns contextos . POSIX, para o padrão sh
manda echo a=~
para a saída a=~
(enquanto isso exige que ~
seja expandido em a=~
sozinho).
zsh
tem uma opção magicequalsubst
que você pode usar para ~
ser expandida após =
, mesmo que não esteja em atribuições ou argumentos para a export
/ typeset
... pseudo- palavras-chave.
Então:
$ echo a=~
a=~
$ set -o magicequalsubst
$ echo a=~
a=/home/chazelas
Observe que bash
, quando não está no modo POSIX / sh
, expande ~
em word=~
, mas apenas quando o que está à esquerda de =
se parece com um nome de variável bash
literal não indicado se está em argumentos para typeset
/ declare
/ export
ou qualquer outro comando):
$ bash -c 'echo a=~'
a=/home/chazelas
$ bash -c 'echo "a"=~'
a=~
$ bash -c 'var=a; echo $var=~'
a=~
$ bash -c 'echo a.b=~'
a.b=~
$ (exec -a sh bash -c 'echo a=~')
a=~