Você pode usar truques:
echo " $EVAR"
echo -e "5E"
echo $'5E'
Mas como eu disse: esses são truques. A solução real é usar printf sempre:
$ printf '%s\n' "$EVAR"
-E
Eu quero executar o echo e obter uma saída como:
$ export EVAR="-E"
$ echo "$EVAR"
-E
Eu armazenei "-E" em uma variável bash, digamos $EVAR . Se eu executar echo $EVAR , o eco não imprimirá nada. Talvez pense que $ EVAR é um argumento -E. A citação de $EVAR nas aspas duplas também não funciona.
Como posso imprimir?
OBSERVAÇÃO : imagino que possa haver uma solução que desconheça o conteúdo de $EVAR - sem nenhuma análise do conteúdo de $ EVAR, um comando como echo some-arg $EVAR . Isso é possível? Ou devo apenas recorrer a um workround como printf ?
Por solicitação, se você está bem com a saída sendo precedida por uma linha em branco, teste você mesmo esta solução, na linha de comando:
$ export EVAR="-E"
$ echo -e "\n$EVAR"
-E
echo "$EVAR" não fornece nada porque, como você suspeitava, ele vê -E como uma opção reconhecida do comando echo .. man echo says: -E disable interpretation of backslash escapes (default)
"\n" , então use -e para interpretar "\n"
$EVAR original, precisará fazer outra coisa na saída para remover a primeira linha em branco que apresentamos use printf , conforme mencionado, ou ative o shopt xpg_echo , o que lhe dá um fechamento ao padrão echo :
echo 'hi\nthere'
hi
there
mas ainda não processará um argumento -E corretamente. para que você possa escrever seus próprios pequenos padrões em conformidade com echo como:
echo()
case ${IFS- } in
(\ *) printf %b\n "$*";;
(*) IFS=\ $IFS
printf %b\n "$*"
IFS=${IFS#?}
esac
... que depois será principalmente compatível com uma única Unix Spec echo em todos os sentidos (exceto que bash printf também rompe com o padrão na manipulação de \[num]{1,3} octals para %b ) .
... e assim ...
echo -E
-E
Há sempre
echo -e "\x2DE"
Com \ x2D sendo o código hexadecimal para "-". O "E" é simplesmente acrescentado depois.
Você pode usar printf em vez de echo :
$ EVAR="-E"
$ printf "%s\n" ${EVAR}
-E