字符串匹配在bash脚本中不起作用

时间:2015-02-27 07:20:06

标签: arrays regex linux bash

这很奇怪..主要是因为它昨晚有效。我有一个脚本,该脚本在一个表达式中传递,该表达式应该与数组中的文件名匹配。我不允许使用find(这是作业)。

例如,如果用户传入参数'*.c',我会检查这些文件:

~/dir/text1.txt
~/dir/no.c
~/dir/no.sh

我在这样的函数中进行比较:

process ()
{
   local new_cur=()
   for i in "${files[@]}"; do
       if [[ "$i" == "$1" ]]; then
           new_cur+=("$i")
       fi
   done
}

然后我在这样的bash脚本中调用它,其中arguments[1] = = '*.c'

process "${arguments[1]}"

在我的process函数中,我检查了字符串*.c并且正在传入文件。但是它没有在我的函数中传递if语句

请注意,即使是没有通配符的简单字符串,这也不起作用。

编辑:我也查找了常见的解决方案,无论出于何种原因都无法正常工作。这是我尝试过的:

if [ "$i" == "$1" ]
if [ "$1" == "$i" ]
if [ "$i" = "$1" ]
if [ "$1" = "$i" ]
if [[ "$1" = "$i" ]]
if [[ "$i" = "$1" ]]
if [[ "$1" == "$i" ]]
if [[ "$i" == *"$1"* ]]

到目前为止,上述都没有奏效。

1 个答案:

答案 0 :(得分:1)

首先将glob声明为变量,然后在测试中使用该变量。所以,声明:

var="$1" then [ $i == $var ] 

这样做的原因是在测试之前强制bash扩展通配符。