搜尋此網誌

2015年2月12日 星期四

linux 間接指定變數(Indirect Variable)


一般來說在Linux裡,直接指定變數(direct variable)有三種方式:

1. 儲存直接指定的值,例如:
[root@blogger] # VAR="assigning value directly"
[root@blogger] # echo $VAR
assigning value directly

2. 儲存指令的輸出結果,例如:
[root@blogger] # VAR=$(uname -a)
[root@blogger] # echo $VAR
Linux blogger2.6.32-431.29.2.el6.x86_64 #1 SMP Tue Sep 9 21:36:05 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

3. 儲存計算結果,例如:
[root@blogger] # VAR=$(( 1 + 1 ))
[root@blogger] # echo $VAR
2

上述的三種方式或許你事先不知道變數的值,但是你一定會知道變數的名稱,例如上面的VAR,就是你一定要知道的變數名稱,才能使用VAR的值。

但是在某些情況下,我們不一定會事先知道變數的名稱,或是要讓程式動態產生變數名稱,這時候就可以用Linux的「eval」指令。

範例:
產生十個uid,
[root@blogger] # vim eval_eg.sh
1 #!/bin/bash
2
3 for (( uid=1; uid<=10; uid=uid+1 ))
4 do
5         suffix="name"
6         eval user_${uid}_${suffix}=user$uid                    => user_1_name=user1
7         eval echo -n '$user'_${uid}_${suffix}: uid=$uid',\ '   => $user_1_name
8         suffix="home"
9         eval user_${uid}_${suffix}="/home/user$uid"
10        eval echo home='$user'_${uid}_${suffix}
11 done







沒有留言:

張貼留言