По моему опыту, в стандартных оболочках Unix очень мало плюшек (для меня это означает csh
, sh
, ksh
), которые также не присутствуют по крайней мере в эквивалентной форме в * 1004. *. Следовательно, если вам комфортно, что bash
будет на всех ваших машинах, вы также можете использовать его для получения максимальной функциональности.
OTOH, если вы хотите иметь дело с переносимостью, вы, вероятно, будете использовать ksh
, который довольно близок к стандарту POSIX - с некоторыми расширениями (bash также довольно близок к стандарту POSIX, но с несколькими расширениями) .
Мне действительно нравятся обозначения POSIX $(cmd)
вместо классических бэк-тиков
`cmd`
(Это было не весело в Markdown!). Одна из главных причин, по которой он мне нравится, заключается в том, что намного и намного проще вкладывать вызовы:
gcclib=$(dirname $(dirname $(which gcc)))/lib
Делать это прямо на одной строке с обратными галочками достаточно глупо, чтобы вы не пытались превратить его в однострочник. Это в ksh
и bash
; это не в классической оболочке Bourne (/bin/sh
, но имейте в виду, что /bin/sh
на некоторых машинах не является классической оболочкой Bourne, а bash
в скрытой оболочке), а также в оболочке C.