請花一些時間來幫助我完成這部分(shell 腳本)
我有一個代碼是
helper()
{
var1="$1"
#multiple lines of code
.
.
#so the variable must be created based on what value is passed as an argument.
$var1_var_name="some string"
#so I should be able to make a varible abc_var_name in this case
}
helper "abc"
所以我想在輔助函式中創建一個變數,以便該變數名是
如果呼叫助手“abc”,則變數應為abc_var_name= “some string”
,或者如果呼叫helper “def”,則變數應為def_var_name= “some string”
uj5u.com熱心網友回復:
您可能需要 namerefs(使用最新版本的 bash):
$ helper() {
declare -n tmp="$1"_var_name
tmp="some string"
}
$ helper "abc"
$ echo "$abc_var_name"
some string
如果您的 bash 版本太舊,您還可以使用read設定命名變數:
$ helper() {
IFS= read -r "$1"_var_name <<< "some string"
}
$ helper "abc"
$ echo "$abc_var_name"
some string
或者printf:
$ helper() {
printf -v "$1"_var_name '%s' "some string"
}
$ helper "abc"
$ echo "$abc_var_name"
some string
為了完整起見,正如評論中所建議的那樣,如果您接受稍微改變您的方法,關聯陣列是另一種選擇:您的所有命名變數都成為關聯陣列的元素,陣列var_name的鍵是您傳遞給函式的名稱,而值是你想要的任何東西。一個重要的好處是您可以輕松地遍歷所有變數:
$ declare -A var_name=()
$ helper() {
var_name["$1"]="some string"
}
$ helper "abc"
$ helper "def"
$ for key in "${!var_name[@]}"; do
printf '%s: %s\n' "$key" "${var_name[$key]}"
done
def: some string
abc: some string
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/440876.html
