簡體   English   中英

Bash創建變量然后為其賦值

[英]Bash create variable then assign value to it

對於這個問題,我有兩個值, curdircurlevel ,它們在我的腳本中發生了變化。 我想知道是否可以創建變量然后使用該值作為另一個值的名稱。 例如

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}

請注意eval安全隱患

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM