藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月26日 11:18


請教大蝦關於${}的問題

有1個變量:$Query_Item_Num 。變量Query_Item_Num的值為1。

如果存在另外一個變量:$Show_Sys_Info_Basic_1, 我想輸出它的值 :

# echo ${Show_Sys_Info_Basic_$Query_Item_Num}

但結果返回 "bad subsitution" 。請問是怎麼回事?

請教大蝦關於${}的問題

這個變量在哪?Show_Sys_Info_Basic
是這樣?
/home/lee/test#Query_Item_Num=1
/home/lee/test#Show_Sys_Info_Basic=2
/home/lee/test#echo ${Show_Sys_Info_Basic}_${Query_Item_Num}
2_1

請教大蝦關於${}的問題

估計他是想
eval echo \$Show_Sys_Info_Basic_$Query_Item_Num

請教大蝦關於${}的問題

不好意思,我沒有講清楚.
系統中並沒有 Show_Sys_Info_Basic 這個變量存在。
而是有n個Show_Sys_Info_Basic_1 至 Show_Sys_Info_Basic_n

Show_Sys_Info_Basic_1=`cat /proc/cpuinfo |grep -i processor`
Show_Sys_Info_Basic_2=`cat /proc/cpuinfo |grep -i vendor`
...
...
...
Show_Sys_Info_Basic_n=`cat /proc/cpuinfo | grep -i xxxxx`

我想通過while循環,將 Show_Sys_Info_Basic_1 到 Show_Sys_Info_Basic_n 的值打印出來。Query_Item_Num的值由1到n。

我的想法是將「Show_Sys_Info_Basic_"和變量Query_Item_Num的值聯合起來成為從 Show_Sys_Info_Basic_1 到 n。我分別試了一下幾種方法 :

1) echo $Show_Sys_Info_Basic_$Query_Item_Num

2) echo ${Show_Sys_Info_Basic_$Query_Item_Num}

3) Name="Show_Sys_Info_Basic_$Query_Item_Num"

   echo $"Name"

4)  Name="Show_Sys_Info_Basic_$Query_Item_Num"

   echo ${Name}


全都不行,不是輸出「$Show_Sys_Info_Basic_1"至」$Show_Sys_Info_Basic_n「,就是返回 "bad substitution"
對於第一種情況,為什麼不是輸出變量 Show_Sys_Info_Basic_1 到 Show_Sys_Info_Basic_n 的值,而是輸出字符串 "$Show_Sys_Info_Basic_1" ~ "$Show_Sys_Info_Basic_n"?是不是變量名不可以組合?

請教大蝦關於${}的問題

前面 waker 兄不是提到了 eval 嗎?

我舉個小例子, 然後你自己改吧:
[code]A_1=x
A_2=y
A_3=z
for ((n=1;n<=3;n++)); do
     eval echo \$A_$n
done[/code]

請教大蝦關於${}的問題

那能解釋一下為什麼需要eval嗎?為什麼不是直接輸出變量值,而是當成字符串輸出?

我對原來的腳本作了些修改,只用一個 Show_Sys_Info_Basic 變量,

放到 while循環中,用case語句來針對不同的 Query_Item_Num 給變量

Show_Sys_Info_Basic 賦予不同的值。這樣就沒有上面的問題,但是需要用case,比較麻煩

請教大蝦關於${}的問題

這真是eval的用處:將輸出的結果執行一次

請教大蝦關於${}的問題

謝謝樓上的各位。那至於出現 "bad substitution" 是什麼原因呢?在{}中的變量名沒有問題啊?



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com