Как заставить Bash Globbing работать в сценарии - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь преобразовать некоторые из моих скриптов ksh93 в bash в cygwin.Я нашел две вещи прямо сейчас, которые доставляют мне неприятности.Первая функция, которую я вставил в .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?

1 Ответ

2 голосов
/ 13 июня 2019

Ваше имя файла имеет заглавную R Review, в то время как ваш глобус использует строчные буквы review.

В вашей локальной оболочке, скорее всего, nocaseglob включен, чтобы выполнять нечувствительную к регистру глобализацию.Если раньше он работал на ksh93, возможно, по умолчанию он также включал аналогичную опцию.

В bash вы должны явно включить его в скрипте с shopt -s nocaseglob

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...