bash e sh output são diferentes?

3

Eu tenho código para imprimir a tabela de multiplicação simples de um determinado número. Quando eu corro com sh isso me dá uma saída perfeita, mas quando eu uso o bash ele dá uma saída um pouco diferente. Você pode explicar por que isso é?

Aqui está a saída com sh

sh cd.sh 

enter the no to print table
12

12 * 1 =12
12 * 2 =24
12 * 3 =36
12 * 4 =48
12 * 5 =60
12 * 6 =72
12 * 7 =84
12 * 8 =96
12 * 9 =108
12 * 10 =120

COntinue.. or not [0/1] 
1

exiting the script

com bash

bash cd.sh 

enter the no to print table
12

\t12 * 1 =12
\t12 * 2 =24
\t12 * 3 =36
\t12 * 4 =48
\t12 * 5 =60
\t12 * 6 =72
\t12 * 7 =84
\t12 * 8 =96
\t12 * 9 =108
\t12 * 10 =120

COntinue.. or not [0/1] 
1

exiting the script

Aqui está o meu código . Eu corrigi todos os erros, então, por favor, ignore qualquer erro se você encontrar um! Concentre-se apenas em "\ t" na saída

    
por Manish Bharti 22.03.2016 / 03:32

1 resposta

6

O motivo que é bash de builtin echo (e também o /bin/echo externo) por padrão não compreende escapes de barra invertida ( \ ), portanto \t está sendo tratado literalmente (em vez de tab) .

Você precisa usar a opção -e com bash incorporado emecho.

De help echo :

-e     enable interpretation of backslash escapes

Então, em bash (ou usando /bin/echo ) você precisa:

echo -e "\t$num * $i =$s"

Por outro lado, sh ( dash ) incorporado em echo por padrão interpreta \t como guia, portanto, você está obtendo uma guia no caso de sh .

Para torná-lo portátil entre todos os shells compatíveis com POSIX, use printf :

printf '\t%s * %s =%s\n' "$num" "$i" "$s"
    
por heemayl 22.03.2016 / 03:41

Tags