我对我想象的简单 bash 命令有疑问
我基本上只是想循环遍历一堆文件并获取名称
`ls ./*.sql` # list all files ending with .sql
if [ $? != 0 ] # make sure such files exist
then
echo "no such file"
else
echo "files exist"
fi
当我跑步时
"ls ./*.sql"
我得到了我所期望的
./file01.sql ./file02.sql
但是当我运行 bash 脚本时我得到
./file01.sql: line 1: some random error
./file01.sql: line 2: some random error
./file01.sql: line 3: some random error
./file02.sql: line 1: some random error
./file02.sql: line 2: some random error
./file02.sql: line 3: some random error
任何人都知道为什么这些会有所不同?
答案1
这是后面的引号。它们告诉 shell 运行命令的输出。
例如
`echo ls`
会跑ls
。
在您的情况下,您已要求 bash 运行 sql 文件。这显然不是你想要的,因为bash不能做到这一点,sql对bash来说没有意义。
此外,即使进行此修复,脚本也不会执行您所描述的操作。其他人(Janis)也给出了解决这个问题的答案,但是他们没有解释为什么你的脚本做了它所做的事情。
答案2
到“循环遍历一堆[.sql] 文件并获取它们的名称”你只需这样做:
for f in *.sql
do
do_whatever_with_file "$f"
done
如果您只想列出文件:
ls *.sql
如果要测试是否*.sql
存在文件,例如:
if ls *.sql >/dev/null 2>&1
then echo sql files existing
else echo no sql files
fi