Shell-Script

如何在shell腳本中動態設置變數名?

  • August 1, 2020

我正在尋找以下內容的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 shshell 沒有與 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

由於我確信您要達到的目標是什麼,所以我想不出一個更有趣的例子。但是在這裡你有一個類似數組的結構,你可以迭代。為什麼要迭代變數的名稱仍然不清楚。

引用自:https://unix.stackexchange.com/questions/557361