|
藍森林 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" 是什麼原因呢?在{}中的變量名沒有問題啊? |
| |