[英]How to use the value of a string in bash as a variable name
希望我能說清楚。 我想從bash
的不同字符串創建文件名。 例如hmd.sh
so h
, m
, d
是不同的值(數字0..9
或字母aA..zZ
)。 所以例如我想轉換
h=1 m=11 and d=12 to 1aA.sh. h=> 1, m=>a and d=>A
像這樣聲明變量
a01=1; a02=2 .. a09=9, a10=0; a11=a; a12=b and so on. h(1)=a01=1 m(11)=a11=a
和
d(12)=a12=A.
為了測試它,我這樣寫:
#!/bin/bash
dd01="1"
aa="01"
bb="dd$aa"
echo $bb
但是當然$bb
是dd01
而不是它的值。 如何使$bb
的值為1?
關聯數組使這種事情更具可讀性。
但是,您的答案是“可變間接”
$ echo $bb
dd01
$ echo ${!bb}
1
不要聽任何建議eval
建議-您可以接受各種代碼注入。
將變量擴展到另一個變量內的唯一方法是將變量括在[$var]
之類的鍵括號內。
您可以將值存儲在關聯數組中,並像這樣引用它們:
declare -A arr
arr[dd01]="1"
arr[aa]="01"
arr[bb]="dd${arr[aa]}"
echo ${arr[${arr[bb]}]}
與使用${!bb}
語法引用變量名稱相比,在本示例中使用這樣的數組可能會更費時,但是如果您需要在保留可能需要互相引用的不同變量集的同時進行此操作,則可以創建一個關聯數組更具組織意義。
我重新編寫了以下代碼示例,該示例為您提供了1的值,這是您要實現的目標。
#!/bin/bash
dd01="1"
aa="01"
bb="dd$aa"
echo $[$bb]
這達到了目的:
#!/bin/bash
dd=1234567890aAbBcC
aa="11"
echo ${dd:(aa-1):1}
顯然1是0位置,aa也可以像01一樣繼續工作!
感謝您的所有建議。
我在這里找到了答案:
這應該可以完成以下工作:
#!/bin/bash
dd01="1"
aa="01"
bb="dd$aa"
eval echo \$$bb
您可以使用“ $”運算符來訪問變量的值。 例如...
d = 'Hi'
e = ' there '
f = 'friend.'
foo = '$d$e$f'
這將導致foo的值成為“ Hi在那里的朋友”。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.