Я пытаюсь преобразовать некоторые из моих сценариев ksh93 в bash в cygwin. Я нашел 2 вещи прямо сейчас, которые доставляют мне проблемы. Во-первых, функция, которую я поместил в .bashrc, не была распознана в сценарии. Я поместил функцию в скрипт, чтобы обойти это. Во-вторых, он не будет глохнуть, как в ksh93. Настройка extglob не помогла. Вот что я сделал:
#! /bin/bash
rep() {
perl -E 'say "'"$1"'" x '$2
# seq -s"$1" $2|tr -d '[:digit:]'
}
# added these 2 lines for testing
shopt -s extglob
shopt extglob
ziptext = "Monthly files for $(date --date = "$(date +%Y-%m-15) -1 month" +'%B %Y')"
equals4=$(rep = $((${#ziptext} + 6)))
equals = "$(rep = ${#ziptext})"
spaces = "$(rep ' ' ${#ziptext})"
# added these 2 lines for testing
ls -l 20[0-9][0-9]' Monthly Data - review.xlsx'
pwd
echo "
$equals4
= $equals =
= $spaces =
= $ziptext =
= $spaces =
= $equals =
$equals4\n\n\n" | zip -9 -u -z \
20[0-9][0-9]' Monthly Data - review.xlsx' \
20[0-9][0-9]' Monthly Tables - review.xlsx'
Результат:
extglob on
ls: cannot access '20[0-9][0-9] Monthly Data - review.xlsx': No such file or directory
/cygdrive/c/reports
zip warning: 20[0-9][0-9] Monthly Data - review.xlsx not found or empty
zip warning: name not matched: 20[0-9][0-9] Monthly Tables - review.xlsx
Из оболочки, делая
ls 20[0-9][0-9]' Monthly Data - review.xlsx' \
20[0-9][0-9]' Monthly Tables - review.xlsx'
Результаты в
'2019 Monthly Data - Review.xlsx'* '2019 Monthly Tables - Review.xlsx'*
Какую настройку я упускаю, чтобы заставить это работать, как в ksh93?
Спасибо. Это исправило это! Если вы поместите свой ответ как ответ на вопрос вместо комментария, я могу проголосовать за него и отметить его как ответ.





Ваше имя файла имеет заглавную букву R Review, а ваш глобус использует строчную букву review.
В вашей локальной оболочке, скорее всего, nocaseglob включено нечувствительное к регистру подстановочное значение. Если раньше это работало на ksh93, то, вероятно, аналогичная опция также была включена по умолчанию.
В bash вы должны включить его явно в скрипте с помощью shopt -s nocaseglob
Кажется, у вас включен
nocaseglobв вашей оболочке, поэтому он соответствуетReview, когда вы пишетеreview. Если вы хотите, чтобы в вашем скрипте также не учитывалось регистрозависимое соответствие, включите его явно