Como posso imprimir “-n” com 'echo'?

7

Eu me sinto muito idiota, mas não consigo imaginar como imprimir a string "-n" com o comando de mais de 30 anos echo .

Eu tentei estes:

Michaels:Scripts$ echo -n
Michaels:Scripts$ echo "-n"
Michaels:Scripts$ echo -e "-n"
Michaels:Scripts$ echo -- -n
-- -n
Michaels:Script$ echo -- "-n"
-- -n
Michaels:Script$ echo "\-n"
\-n

Eu uso o Mac OS X ML. Eu considero esse comportamento muito estranho e inesperado.

    
por Michael 07.08.2013 / 17:53

4 respostas

7

Se você não quiser usar prinf , terá algumas opções, pelo menos de acordo com este SO Q & A, intitulado: echo" -n "não imprime -n? .

Esta parece ser a sua melhor opção:

$ echo "x-n" | cut -c 2-
-n

Ou alguma variação:

$ echo -- '-n'|cut -d" " -f2
-n

printf

printf não tem esse problema:

$ printf "%s\n" -n
-n
    
por 07.08.2013 / 18:01
7

Por que você deseja usar echo ? Use printf :

printf -- '-n\n'

Ou:

printf '%s\n' -n

com echo :

echo -n

Produzirá -n<LF> em conformidade com UNIX echo .

bash , dash , GNU ou zsh echo (em suas configurações padrão) podem fazer isso com:

echo -en '-n\n'

Ou (em sistemas baseados em ASCII):

echo -e '5n'

Zsh echo pode fazer isso com:

echo - -n

bash (mas não zsh ):

echo -n -; echo n

Curiosamente, é impossível produzir -n com echo sozinho em uma forma POSIX (ou seja, mais ou menos, portável entre Unices e Unix-like), desde o comportamento se o primeiro argumento for -n ou se algum argumento contiver caracteres de barra invertida não é especificado.

    
por 07.08.2013 / 18:54
2

Por razões históricas, echo não faz o tipo usual de análise de argumentos onde qualquer argumento que comece com - é uma opção, exceto que -- sinaliza o fim da opção. O comando echo geralmente imprime seus argumentos inalterados, mas dependendo da variante unix, no shell e em como o shell é configurado, ele pode interpretar algumas opções ( -e , -E , -n , - ) e pode tratar barra invertida + caracteres especialmente.

Não há uma maneira portátil de imprimir -n com echo sozinho. A maneira portátil de imprimir uma string sem ter que se preocupar com caracteres especiais é

printf %s -n

ou mais geralmente print %s "$somestring" . Se você quiser imprimir uma nova linha final após a string, use printf '%s\n' -n .

    
por 08.08.2013 / 02:29
0

Tente isso, se você precisar de "-n" como os dois primeiros símbolos:

echo -e '\r-n'

Outra maneira:

echo -n '-'; echo 'n'
    
por 08.08.2013 / 01:16