bash 脚本片段
folder="some folder's name"
a="$folder/"*".pdf"
if [ "$a" != "$folder"'/*.pdf' ]
then
echo check
fi
从不打印check
。
我希望它能够打印check
当且仅当有至少 1 个文件的名称以.pdf
文件夹结尾$folder
。
echo $a
并echo "$folder"'/*.pdf'
准确打印我期望它们打印的内容:如果*.pdf
指定文件夹中至少有 1 个文件,则前者打印匹配的路径,否则打印后者打印的内容。后者始终打印指定的较旧名称与 串联/*.pdf
。
- 为什么 bash 会有这样的行为?
- 我该如何让它发挥作用?
答案1
该表达式"$folder/"*".pdf"
将扩展到所有可能的以.pdf
.
为什么?这*
标志保留其特殊含义,即通配。
虽然这个字符串"$folder"'/*.pdf'
只是 2 个单独的字符串"$folder"
和的串联'/*.pdf'
。
作为*
用单引号括起来的符号 - it失去其特殊意义。
根据您的主要目标检查当前文件夹是否至少有一个.pdf
文件并打印一些"pdf file found!"
成功的短语:
if [ ! -z `find foldername -type f -name "*.pdf" -print -quit` ]; then
echo "pdf file found!"
fi
答案2
您的if
语句不起作用,因为$a
用双引号括起来的只是一个包含 a 的字符串*
(echo "$a"
与进行比较echo $a
)。如果删除双引号,if
一旦有多个文件匹配,您的语句就会失败。
don_crissti 的链接有很好的解决方案。