[英]Bash create variable then assign value to it
對於這個問題,我有兩個值, curdir和curlevel ,它們在我的腳本中發生了變化。 我想知道是否可以創建變量然后使用該值作為另一個值的名稱。 例如
temp="dir_${curdir}_${curlevel}"
$temp=$name_of_directory **<----Is there a legitimate way to do this?**
所以如果最初curdir=1
並且curlevel=0
那么$(temp)=directory_one
等於
dir_1_0=directory_one
然后如果curdir=2
並且curlevel=4
,我可以重置temp然后擁有
$(temp)=another_directory
是相同的
dir_2_4=another_directory
所以我可以打個電話
cd $(temp)
這將在我需要時將我移動到不同的目錄
我想你想要的是使用eval
。 像這樣:
$ foo=bar
$ bar=baz
$ eval qux=\$$foo
$ echo $qux
baz
所以你能做的就像是
eval temp=\$$"dir_${curdir}_${curlevel}"
cd $temp
這方面的訣竅是使用eval
- 幾次。
curdir=1
curlevel=0
temp='dir_${curdir}_${curlevel}' # Note single quotes!
x=$(eval echo $temp)
eval $x=$PWD
cd /tmp
curdir=2
curlevel=4
x=$(eval echo $temp)
eval $x=$PWD
echo $dir_1_0
echo $dir_2_4
sh -x script
的輸出:
+ curdir=1
+ curlevel=0
+ temp='dir_${curdir}_${curlevel}'
++ eval echo 'dir_${curdir}_${curlevel}'
+++ echo dir_1_0
+ x=dir_1_0
+ eval dir_1_0=/Users/jleffler/tmp/soq
++ dir_1_0=/Users/jleffler/tmp/soq
+ cd /tmp
+ curdir=2
+ curlevel=4
++ eval echo 'dir_${curdir}_${curlevel}'
+++ echo dir_2_4
+ x=dir_2_4
+ eval dir_2_4=/tmp
++ dir_2_4=/tmp
+ echo /Users/jleffler/tmp/soq
/Users/jleffler/tmp/soq
+ echo /tmp
/tmp
sh script
的輸出:
/Users/jleffler/tmp/soq
/tmp
轉換為函數:
change_dir()
{
temp='dir_${curdir}_${curlevel}' # Note single quotes!
x=$(eval echo $temp)
eval $x=$PWD
cd $1
}
curdir=1
curlevel=0
change_dir /tmp
curdir=2
curlevel=4
change_dir $HOME
echo $dir_1_0
echo $dir_2_4
pwd
輸出:
/Users/jleffler/tmp/soq
/tmp
/Users/jleffler
記錄的名稱是剩下的目錄的名稱,而不是您到達的名稱。
這樣做的安全方法是使用間接,關聯數組(Bash 4),函數或declare
:
使用declare
:
declare $temp=$name_of_directory
使用間接:
bar=42
foo=bar
echo ${!foo}
IFS= read -r $foo <<< 101
echo ${!foo}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.