bash и sh вывод отличается?

3

У меня есть код для печати простой таблицы умножения заданного числа. Когда я запускаю его с помощью sh, он дает мне отличный результат, но когда я использую bash, он дает немного другой результат. Можете ли вы объяснить, почему это так?

Вот результат с 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

С 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

Вот мой код . Я исправил каждую ошибку, поэтому, пожалуйста, проигнорируйте любую ошибку, если вы встретите ее! Фокусируйтесь только на "\ t" на выходе

    
задан Manish Bharti 22.03.2016 в 03:32
источник

1 ответ

6

По умолчанию bash встроенный echo (а также внешний /bin/echo ) по умолчанию не понимает escape-обраты ( \ ), поэтому \t обрабатывается буквально (вместо вкладки) ,

Вам нужно использовать опцию -e с встроенным bash echo .

От help echo :

-e     enable interpretation of backslash escapes

Итак, в bash (или используя /bin/echo ) вам нужно:

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

С другой стороны, sh ( dash ), встроенное в echo , по умолчанию интерпретирует \t как вкладку, поэтому вы получаете вкладку в случае sh .

Чтобы сделать его переносимым среди всех оболочек, совместимых с POSIX, используйте printf :

printf '\t%s * %s =%s\n' "$num" "$i" "$s"
    
ответ дан heemayl 22.03.2016 в 03:41
источник