Bash 在向变量追加文件扩展名时,如何避免区分大小写

Bash 在向变量追加文件扩展名时,如何避免区分大小写,bash,Bash,在向变量追加“.csv”时,我需要避免区分大小写: shopt -s nocaseglob date=("$1".csv) 这似乎不起作用,尽管它在这里起作用: shopt -s nocaseglob files=($dirPath/*.csv) 我如何使其工作,使变量$1可以被读取为$1.csv或$1.csv?nocaseglob仅适用于全局,即.*、[]。 $1.csv不是全局变量,因此不受设置的影响 您可以使用与一个字母完全匹配的字符类将字符串转换为glob: shopt -s noc

在向变量追加“.csv”时,我需要避免区分大小写:

shopt -s nocaseglob
date=("$1".csv)
这似乎不起作用,尽管它在这里起作用:

shopt -s nocaseglob
files=($dirPath/*.csv)
我如何使其工作,使变量$1可以被读取为$1.csv或$1.csv?

nocaseglob仅适用于全局,即.*、[]。 $1.csv不是全局变量,因此不受设置的影响

您可以使用与一个字母完全匹配的字符类将字符串转换为glob:

shopt -s nocaseglob
date=("$1".cs[v])
这只适用于您知道字符串的文字部分。如果你想赚1美元,那么你必须依靠扩展globs:

shopt -s nocaseglob
shopt -s extglob
date=("$1"?())
看起来像

shopt -s nocasematch

工作

尝试shopt-s nocasematch并查看:第二个示例之所以有效,是因为有一个通配符*并且nocaseglob会影响它匹配patterns@GeorgeUdosen的方式。shopt-s nocasematch解决方案可以解决其他问题,您是否考虑过使用不区分大小写的文件系统或目录?这说明它将在内核5.2中出现在Linux上,并且一些文件系统默认不区分大小写。@HelloQuantumWorld:您想要实现什么?date=$1.csv创建一个名为date的单元素数组,该元素被设置为第一个参数,并与literal.csv关联。我看不出在哪一点上区分大小写会起作用——这只是串接。你确定吗?man bash | grep-A5“^*nocasematch$”中的描述听起来不像这样。此外,如果它起作用,那么您是否会失去安全指定文本字符串的能力?bash如何知道a=abc是否意味着文件abc,abc,abc。。。或者文字字符串abc?如果您解释了您提供的代码如何回答问题,这将是一个更好的答案。