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