繁体   English   中英

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

[英]String matching not working in bash script

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

例如,如果用户传入参数'*.c' ,而我有以下文件'*.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"* ]]

到目前为止,以上方法均无效。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM