【问题标题】:Comparing a variable to a string using wildcards使用通配符将变量与字符串进行比较
【发布时间】:2014-11-08 16:24:46
【问题描述】:

我正在创建一个脚本,它读取某个目录中的每个文件并使用每个文件中的一些信息,但是每个目录中都有一个名为“logdia + date”的文件,我不想将其包含到我的循环中,我有尝试使用if语句将文件的规则与使用通配符的字符串进行比较,但条件永远不会失败,并且它总是将“logdia”文件包含在我的循环中,我错过了什么?谢谢你

list_dir=$(ls -tr /opt/srv001/app/sam/trazas/*$v_fecha*)

for dir in $list_dir
do
if [ $dir != "*logdia*" ]
 then
 //Do stuff
fi
done

【问题讨论】:

    标签: linux shell if-statement wildcard ksh


    【解决方案1】:

    正确的做法如下:

    for dir in /opt/srv001/app/sam/trazas/*$v_fecha*; do
       if [[ "$dir" != *"logdia"* ]]; then
          echo "Do stuff Here"
       fi
    done
    
    1. 在使用 glob 模式进行比较时,将 glob 模式保留在引号之外。
    2. 避免解析 ls 的输出。

    【讨论】:

    • 谢谢,我曾尝试在引号外使用通配符,并且我曾尝试避免解析其输出,但不能同时解析这两种情况!再次感谢
    • 你能给出一个为什么应该避免解析ls的输出的理由吗?
    • 为什么不应该解析 ls 的输出(感谢@anubhava 提供的链接):不应该使用 ls 因为文件名没有命名限制,这会弄乱 ls 命令。例如。如果文件的名称中包含换行符, ls 可能无法按预期工作。所以获取目录中所有文件名的最好方法是使用 dir 命令。
    猜你喜欢
    • 2019-02-14
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2015-08-14
    相关资源
    最近更新 更多