2012-10-17 199 views
0

如何將動態值分配給變量?我所知道的最簡單的方法是使用函數。例如將動態值分配給變量

fn(){ 
    VAR=$VAL 
} 
VAL=value 
fn 
echo $VAR 

將輸出

value 

但我想簡單的東西,像

VAR=$VAL 
VAL=value 
echo $VAR 

輸出

value 

我應該使用什麼命令?優選地與破折號兼容。

謝謝!

UPDATE:在連接破折號刪除#/ bin/sh的!感謝「Ignacio Vazquez-Abrams」的解釋!

更新2:爲我的腳本添加源以更好地瞭解情況。

INPUT=`dpkg -l|grep ^rc|cut -d' ' -f3` 
filter(){ 
    echo *$A* 
} 
for A in $INPUT;do find ~ -iname `filter`|grep ^$HOME/\\.|grep -iz --color $A;done 

此腳本應該有助於查找已刪除軟件包的其餘配置文件。

+0

'/斌/ sh'不是衝我的系統上。 –

+0

糾正我,如果我錯了,但正如我所知'/ bin/sh'被稱爲_dash_,而'/ bin/bash'被稱爲_bash_。 – mYself

+0

在我的系統上'/ bin/sh'是bash。 –

回答

0

如何設置一個簡單的函數值?

# export is needed so f() can use it. 
export VAR 

f() { 
    [email protected] 
} 

f 10 
echo $VAR 
f 20 
echo $VAR 

上面的代碼會顯示:

10 
20 
+0

我想不使用函數。 – mYself

0

如果我理解你的需求,你想要一個間接,所以請嘗試以下shell代碼(與dash測試):

var=foo 
x=var 
eval $x=another_value 
echo $var 

輸出

another_value 

終於

您需要修改var每個時代,你需要運行eval $x=foobar

+0

我在某處讀到_eval_不是一個好選擇,因爲它提出了一個安全漏洞。因此,我寧願使用這個功能。 – mYself

+0

用一些shell(bash),你可以用'declare'來代替。 –

+0

我知道這一點,但正如你所說,它只能使用_bash_,它通常比_dash_慢。我寧願爲此使用_function_。 – mYself

1

好吧,如果功能不好,那麼也許調用EVAL是好嗎?

export VAR='echo $VAL' 
VAL=10 
eval $VAR 

這將顯示

10 
+0

我寧願遠離_eval_。正如我之前提到的,它代表了系統的安全漏洞。 – mYself

+0

如何導出VAR ='expr $ VAL + 0'呢?除VAL之外,expr將失敗...... – Grzegorz

+0

_value_應該以_text_的形式與另一個變量_組合。 – mYself