这是我的代码:
if [ -f /Applications/xml[0-9].pl ]
我也尝试过使用-f =~
双括号,但似乎都不起作用。
我首先认为正则表达式可能有问题,但我尝试了这个。
echo h1 | sed 's/h[0-9]/h/'
这奏效了。我在这里做错了什么?
答案1
您无法使用正则表达式或像这样的 glob 来测试文件。您必须迭代文件:
for file in /Applications/xml[0-9].pl; do if [ -f "$file" ]; then ...
答案2
bash 在评估条件之前扩展正则表达式。如果您的目录包含三个名为
/Applications/xml0.pl
/Applications/xml1.pl
/Applications/xml2.pl
你的if
声明看起来像
if [ -f /Applications/xml0.pl /Applications/xml1.pl /Applications/xml2.pl ]]
这在语法上是不正确的。当您想使用以下命令查找文件是否存在时,您需要完整指定文件名
for file in /Applications/xml[0-9].pl
do
if [ -f ${file} ]
或者如果可以的话,使用该find
命令对文件执行任何您想要执行的操作。