我是新来的shell脚本,我在使用" test"命令和特殊字符 *比较两个字符串时遇到了一些麻烦。
我必须编写一个shell脚本,该脚本对于第一个参数传递的目录中包含的每个元素(文件和目录),必须写一些东西(对于解决我的问题,知道什么是无关紧要的在文件" summary.out"上写下)。更重要的是,还有一个字符串作为第二个参数。这些以此字符串开头的文件/目录必须忽略(摘要上不需要编写)。
。这是代码:
#!/bin/bash
TEMP=NULL
cd "$1"
for i in *
do
if test "$i" != "$2"*;then #Here is where the error comes from
if test -f "$i";then
TEMP="$i - `head -c 10 "$i"`"
elif test -d "$i";then
TEMP="$i - `ls -1 "$i" | wc -l`"
fi
echo $TEMP >> summary.out
fi
done
错误来自测试,该测试检查当前文件/目录是否以第二个参数传递的字符串开始,并且发生在for Cycle的每一个迭代中。它指出:"测试:太多参数"
现在,我进行了一些测试,这些测试表明问题与$ i或$ 1的空白无关。问题与我在测试中使用特殊字符 *的事实有关(如果我删除它,一切正常)。
为什么不能"测试"句柄 *?我该怎么办才能解决?
*
被外壳展开。
在Bash中,您可以使用[[ ... ]]
在条件上而不是test
。它们支持右侧的模式-*
未扩展,因为双方括号是具有更高优先级的关键字。
if [[ a == * ]] ; then
echo Matches
else
echo Doesn't match
fi