1、從輸入讀入變數
用e選項表示編輯,可以使用backspace刪除
2、陣列
a、索引陣列
declare -a arr=(var1 var2 var3) 用空格分割,如果直接訪問變數$arr,
則獲取的是陣列的第乙個元素,訪問要是用$來。
也可宣告陣列後再賦值,即declare -a arr;arr[0]=var1;arr[1]=var2;arr[3]=var3
如下:
獲取所有陣列元素把索引換為@,獲取陣列長度則要在獲取所有陣列的變數前加#
如下:
b、關聯陣列
關聯陣列把-a,換為-a即可,其它和索引陣列類似,但是直接訪問變數將沒有輸出。
這也好理解,因為沒有第乙個元素的概念了,而且可以看到獲取所有key對應的值時,也是沒有順序的。
3、字串轉變量
使用eval命令求值
eval可以用返回值儲存變數,這就有可以和關聯陣列,實現比較好玩的東西了。
4、多維陣列
declare -a map1=(如果這時候想獲取陣列arr裡的第乙個元素的key1值,估計大家會想到[key1]=a1
[key2]=b1
)declare -a map2=(
[key1]=a2
[key2]=b2
)declare -a arr=(map1 map2)
tmp=$;echo $
然而輸出的是map1,因為map1只是個字串,並不是指向$map1變數。
於是可能會想到,這麼修改,declare -a arr=($map1 $map2),可是結果是什麼也沒輸出。
後來我找了一些資料,也沒找到解決的方法。或許是bash不支援。
讓我們用eval來試試。
eval tmp="\$";echo $tmp;
\$表示轉義,即不要當變數解析,可以看到成功輸出a1。
那麼我們把map1構造出來,$即map1,完整如下:
eval tmp="\$[key1]}";echo $tmp
那麼我們就可以在迴圈裡做些事情了:
declare -a map1=(這裡的$var即陣列arr裡的元素,可以看到成功的輸出了預期值:[key1]=a1
[key2]=b1
)declare -a map2=(
[key1]=a2
[key2]=b2
)declare -a arr=(map1 map2)
for var in $; do
eval tmp="\$"
echo
$tmp
done
一些小技巧
關注 乙個好的程式設計師不應該把所有的判斷交給編譯器和偵錯程式,應該在程式中自己加以程式保護和錯誤定位,具體措施包括 對於所有有返回值的函式,都應該檢查返回值,除非你確信這個函式呼叫絕對不會出錯,或者不關心它是否出錯。一些函式返回錯誤,需要用其他函式獲得錯誤的具體資訊。例如accept返回inval...
一些小技巧
protected void repparent itemdatabound object sender,system.web.ui.webcontrols.repeateritemeventargs e 在父datalist的itemdatabound事件裡面寫子datalist的資料來源 繫結 ...
一些小技巧
protected void repparent itemdatabound object sender,system.web.ui.webcontrols.repeateritemeventargs e 在父datalist的itemdatabound事件裡面寫子datalist的資料來源 繫結 ...