Bash
帶有萬用字元的 Linux Bash 腳本問題
我對我想像的應該是一個簡單的 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
任何人都知道為什麼這些會有所不同?
它是反引號引號。它們告訴 shell 執行命令的輸出。
例如
`echo ls`
將執行
ls
。在您的情況下,您已要求 bash 執行 sql 文件。這顯然不是您想要的,因為 bash 無法做到這一點,因此 sql 對 bash 沒有意義。
此外,即使使用此修復程序,腳本也不會執行您描述的操作。其他人(Janis)也給出了解決該問題的答案,但是他們沒有解釋為什麼您的腳本會這樣做。
要*“遍歷一堆 [* .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