![為什麼這個 bash 腳本不起作用?](https://rvso.com/image/845006/%E7%82%BA%E4%BB%80%E9%BA%BC%E9%80%99%E5%80%8B%20bash%20%E8%85%B3%E6%9C%AC%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
當我運行以下命令時
./command *
使用這個腳本
#!/bin/bash
for f in ./$1
do
echo $f
done
僅回顯 $1 中指定的第一個檔案。我的問題是為什麼?
答案1
因為您在執行指令時沒有使用單引號或雙引號:
./command '*'
或者:
./command "*"
或者,如果您確實想使用./command *
,請在腳本中進行以下修改:
#!/bin/bash
for f in ./"$@"
do
echo $f
done
這是因為$1
指的是命令中的第一個參數,而$@
指的是命令中的所有參數。
也請閱讀一些這方面的文件:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF
答案2
*
當您執行命令時,shell 會展開。所以,運行腳本相當於
./command file1.txt file2.txt file3.txt
$1
對應於第一個參數,因此循環只有一次迭代。
答案3
$1
僅指第一個參數。你需要使用$*
.
#!/bin/bash
for f in $*
do
echo $f
done