一般來說在Linux裡,直接指定變數(direct variable)有三種方式:
1. 儲存直接指定的值,例如:
[root@blogger] # VAR="assigning value directly"
[root@blogger] # echo $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
[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
[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
沒有留言:
張貼留言