shopt -s extglob
является специфичным для bash -(shopt
отдельно является специфичным для bash -, bash
является единственной оболочкой, имеющей два набора параметров)
Параметр extglob
в bash
включает поддержку расширенных подстановочных значений ksh. В ksh это не нужно, хотя обратите внимание, что в ksh эти глобусы не распознаются при использовании в переменных.
printf -v
является расширением bash
. Это не поддерживается и не нужно в ksh93, потому что там подстановка команд не создает подоболочку. Поэтому вместо:
printf -v var...
использовать
var=$(printf...)
или в кш93:
var=${ printf...;}
если аргументы printf
должны вносить изменения в среду (, как в ${foo=bar}
или$((n++))
). (хотя обратите внимание, что он удаляет завершающие символы новой строки ).
Также обратите внимание, что ksh93 поддерживает арифметику с плавающей запятой, в отличие от bash
, поэтому вам не нужно прибегать к такого рода хакам.
Кроме этого, я не вижу здесь ничего, что могло бы объяснить сообщение об ошибке, которое вы получаете.
Теперь я понял.
Значение color codes
означает, что ls --color=always
выводит некоторый дополнительный текст, описывающий цвета, и обычно терминал поглощает эти тексты.
Однако при ls --color=always > test.txt
дополнительный текст, описывающий цвета, будет сохранен и сохранен.
Попробуйте ls --color=always > file1.txt
и ls --color=auto > file2.txt
и откройте оба файла, например. с nano
, и вы можете увидеть различия.