我正在开发一个shell脚本,只有在txt文件存在的情况下对txt文件执行某些处理,但是这个测试循环不起作用,我想知道为什么?谢谢!
while [ -e '*.txt' ]
do
$process
done
答案 0 :(得分:3)
您的while
循环(一旦修复)将持续运行$process
,直到所有名为*.txt
的文件都被删除。我不知道那将是多么有用。
我猜 - 猜测,请注意 - 您打算做这样的事情:
for f in *.txt; do $process; done
这将为每个$process
文件调用.txt
一次,将$f
设置为文件名。例如,
for f in *.txt; do cat $f; done
将输出当前目录中每个.txt
文件的内容。
答案 1 :(得分:0)
如果全部在一行,您的命令需要分号,如下所示:
while [ -e '*.txt' ] ; do $process ; done
但是,我不认为[-e'* .txt']可以做你想要的。它查找一个名为'* .txt'的文件。
这不是一个简洁的解决方案,但这似乎有效:
while stat --format='' *.txt >/dev/null 2>/dev/null ; do $process ; done
有人可能会使用 find 或其他命令而不是 stat,,但想法是选择一个返回true的命令,当且仅当至少有一个参数是提供。最好是根据 argc编写自己的返回0或1的命令。
但是,也请看@Thomas的回复。有人怀疑他的猜测可能是正确的。
更新:这是一个更好的答案:
at_least_one() { (($# > 0)) ; }
while at_least_one *.txt ; do $process ; done