如何使bash遍历在脚本中起作用

时间:2019-06-12 15:19:37

标签: linux bash cygwin

我正在尝试将某些ksh93脚本转换为cygwin中的bash。我现在发现了两点麻烦。第一个是我放入.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 个答案:

答案 0 :(得分:2)

您的文件名具有大写的R Review,而您的glob使用小写的review

您的本地Shell很可能已启用nocaseglob来进行不区分大小写的glob。如果以前可以在ksh93上运行,则默认情况下也可能启用了类似的选项。

在bash中,您必须使用shopt -s nocaseglob

在脚本中明确启用它