你在這裏混合了幾件事情。從哪裏開始...
將值傳遞給腳本的常用方法是通過位置參數。
假設你這個劇本,叫s1
:
#!/bin/bash
echo "First two args are: $1 $2"
如果你喜歡這個執行:
./s1 Arg1 Arg2
您將看到以下的輸出:
First two args are: Arg1 Arg2
如果您想要將一個變量名稱傳遞給腳本,並讓該腳本輸出這個值變量,那麼你必須做兩件事。首先,初始化變量並使其可以通過子進程(包括您將調用的腳本,這是一個單獨的進程,除非使用source
或.
調用)才能看到。
VAR="Some value"
export VAR
您也可以在單個語句一舉兩得:
export VAR="Some value"
然後,適應腳本來執行的變量的間接訪問:
#!/bin/bash
echo "Value of variable named $1 : ${!1}"
請注意,雖然$1
的意思是「變量1的內容」,${!1}
的意思是「變量的內容被命名爲$1
」。這是間接的一部分。
現在,如果您想要更進一步,並允許腳本以交互方式讀取用戶輸入(而不是參數)並將讀取的值用作變量名稱來展開,則可以這樣做:
#!/bin/bash
echo "Please enter a variable name"
read VARNAME
echo "Value of variable named $VARNAME : ${!VARNAME}"
使用位置參數可以使腳本更容易在非交互式場景中重用,因此讀取用戶輸入應限制在必要的情況下。
以上是幫助理解基礎。如果您不再使用玩具腳本,您需要了解間接訪問的安全影響(特別是如果允許用戶輸入的話)。您還需要驗證位置參數或用戶輸入對您的目的有效(即包含有效的變量名稱),以便您的腳本可以做出適當的反應。那麼,你可能需要檢查位置參數是否提供了開始。所有這些在shell腳本中都是可行的,但超出了單個問題的範圍。在任何情況下,如果您打算在預期可靠性的情況下擁有健壯的腳本,則需要檢查輸入(以及錯誤)。