日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bash的一些小技巧

發布時間:2023/12/19 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bash的一些小技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、從輸入讀入變量

eg:read -ep "input yes or no: " flag

用e選項表示編輯,可以使用backspace刪除

2、數組

a、索引數組

declare -a arr=(var1 var2 var3) 用空格分割,如果直接訪問變量$arr,

則獲取的是數組的第一個元素,訪問要是用${arr[idx]}來。

也可聲明數組后再賦值,即declare -a arr;arr[0]=var1;arr[1]=var2;arr[3]=var3

如下:

獲取所有數組元素把索引換為@,獲取數組長度則要在獲取所有數組的變量前加#

如下:

b、關聯數組

關聯數組把-a,換為-A即可,其它和索引數組類似,但是直接訪問變量將沒有輸出。

這也好理解,因為沒有第一個元素的概念了,而且可以看到獲取所有key對應的值時,也是沒有順序的。

3、字符串轉變量

使用eval命令求值

eval可以用返回值存儲變量,這就有可以和關聯數組,實現比較好玩的東西了。

4、多維數組

declare -A map1=([key1]=a1[key2]=b1)declare -A map2=([key1]=a2[key2]=b2 )declare -a arr=(map1 map2)

如果這時候想獲取數組arr里的第一個元素的key1值,估計大家會想到

tmp=${arr[0]};echo ${tmp[key1]}

然而輸出的是map1,因為map1只是個字符串,并不是指向$map1變量。

于是可能會想到,這么修改,declare -a arr=($map1 $map2),可是結果是什么也沒輸出。

后來我找了一些資料,也沒找到解決的方法。或許是bash不支持。

讓我們用eval來試試。

eval tmp="\${map1[key1]}";echo $tmp;

\$表示轉義,即不要當變量解析,可以看到成功輸出a1。

那么我們把map1構造出來,${arr[0]}即map1,完整如下:

eval tmp="\${${arr[0]}[key1]}";echo $tmp

那么我們就可以在循環里做些事情了:

declare -A map1=([key1]=a1[key2]=b1)declare -A map2=([key1]=a2[key2]=b2 )declare -a arr=(map1 map2)for var in ${arr[@]}; doeval tmp="\${$var[key1]}"echo $tmpdone

這里的$var即數組arr里的元素,可以看到成功的輸出了預期值:

?

總結

以上是生活随笔為你收集整理的bash的一些小技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。