Shell-Script
如何在shell腳本中動態設置變數名?
我正在尋找以下內容的
sh
等價物(是的,真的。)#!/bin/bash exe1='filepath' n=1 var=exe${n} echo ${!var}
echo 應該在哪裡輸出
filepath
。我想使用普通的 sh。我已經玩了很多程式碼,但到目前為止我還沒有設法得到正確的輸出。
我想實現一個類似數組的結構,我只想使用循環遍歷已知數量的變數的變數名。
對於數組,我在符合 POSIX 的 shell 中找到了 Arrays,但出於好奇,我仍在尋找問題的答案;)
與問題中提出的等效
sh
腳本:#!/bin/sh exe1='filepath' n=1 var=exe$n eval "echo \"\$$var\"" # or: eval 'echo "$'"$var"'"'
該
eval
行將在目前環境中將給定的字元串評估為命令。給定的字元串是echo \"\$$var\"
,在擴展變數等之後,它將變為echo "$exe1"
。這被傳遞給eval
重新評估,命令列印字元串filepath
。您還提到了數組。確實,POSIX
sh
shell 沒有與 eg 相同的命名數組bash
,但它仍然具有位置參數列表。有了它,你可以做大部分你需要在 shell 中做一個列表的事情。
例如,
set -- 'filepath1' 'filepath2' 'filepath3' for name in "$@"; do # or: for name do echo "$name" done
這和剛才一樣
for name in 'filepath1' 'filepath2' 'filepath3' do echo "$name" done
由於我確信您要達到的目標是什麼,所以我想不出一個更有趣的例子。但是在這裡你有一個類似數組的結構,你可以迭代。為什麼要迭代變數的名稱仍然不清楚。