當我運行以下命令時
./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