我对通配符有这个“问题”,我只是想弄清楚为什么会这样。
以下示例:
#!/bin/bash
basefolder=/tmp/
rm $basefolder"processed/*.txt*"
这导致rm的错误消息“无法找到/ tmp / processed / .txt ”。 这当然不正确,因为此文件夹中有文件,当我只是从错误消息中复制并通过该文件夹时,它会正确删除它。
同样适用于for循环
#!/bin/bash
basefolder=/tmp/
for file in $basefolder"processed/*.txt*"
...
无效,我的解决方法如下
#!/bin/bash
basefolder=/tmp/
filepattern=$basefolder"processed/*.txt*"
for file in $filepattern
...
另一种方法是将basefolder设置为/ tmp,然后使用$ basefolder / processed / .txt (这会起作用),但我更好奇为什么这个问题甚至存在。
任何人都可以给我一个解释吗?
答案 0 :(得分:0)
问题在于引用:
ls /tmp/"foo*"
表示列出名为/tmp/foo*
的文件不匹配/tmp/foobar
或/tmp/foo
ls /tmp/foo*
(没有引号)与/tmp/foo
和/tmp/foobar
匹配
所以,这些都应该有效:
basefolder=/tmp/
rm ${basefolder}processed/*.txt*
# I like this better, no need for ${}:
basefolder=/tmp
rm $basefolder/processed/*.txt*
# the loop:
basefolder=/tmp
for file in $basefolder/processed/*.txt*
答案 1 :(得分:0)
不保护模式*.txt*
它有效。
因此脚本应该是:
#!/bin/bash
basefolder=/tmp
/bin/rm "$basefolder"/processed/*.txt*