為什麼這個 bash 腳本不起作用?

為什麼這個 bash 腳本不起作用?

當我運行以下命令時

./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

相關內容