linux - 我如何让 bash globbing 在脚本中工作

标签 linux bash cygwin

我正在尝试将我的一些 ksh93 脚本转换为 cygwin 中的 bash。我现在发现了两件事给我带来了麻烦。第一个是我放入 .bashrc 的函数在脚本中无法识别。我把这个函数放在脚本中来解决这个问题。第二个是它不会像在 ksh93 中那样 glob。设置 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

从 shell 做

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,而您的 glob 使用小写字母 review

您的本地 shell 很可能启用了 nocaseglob 来执行不区分大小写的 globbing。如果这曾经在 ksh93 上工作,它可能也默认启用了类似的选项。

在 bash 中,您必须使用 shopt -s nocaseglob 在脚本中显式启用它

关于linux - 我如何让 bash globbing 在脚本中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56565571/

相关文章:

linux - 将哈希传递给 puppet/erb 中定义的类型

linux - 如何在Shell脚本中编写正则表达式?

linux - 施根 : pass a command to be executed as if it’s in a shell

linux - 如果 shell 脚本中发生错误,通过电子邮件通知

bash - 从 Amazon S3 存储桶下载文件的脚本

java - Buildozer 不适用于 cygwin 下的 java

java - 内存不足,无法继续运行 Java 运行时环境

bash - 使用 Linux 工具将多行 csv 转换为单行

windows - 如何创建启动 Cygwin 并跟踪特定文件的桌面快捷方式?

node.js - 我应该更改环境变量以在 Windows 中的 Cygwin 下使用 npm 脚本吗?