詳解shell數(shù)組${arr[*]}和${arr[@]}區(qū)別
引用數(shù)組中所有元素時(shí)${arr[*]}和${arr[@]}是有細(xì)微區(qū)別的
Example:
#!/bin/sh function showarr(){ arr=$1 for b in ${arr[*]};do echo $b done return 0 } regions=('aa pp' 'bb' 'cc') showarr $regions exit 0
$regions其實(shí)只引用了數(shù)組的第一個(gè)元素
#!/bin/sh function showarr(){ arr=$1 for b in ${arr[*]};do echo $b done return 0 } regions=('aa pp' 'bb' 'cc') showarr ${regions[*]} echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ showarr ${regions[@]} exit 0
引用了數(shù)組全部元素,但是showarr函數(shù)中arr變量只獲取了第一個(gè)參數(shù)的值 "aa"
#!/bin/sh function showarr(){ arr=$1 for b in ${arr[*]};do echo $b done return 0 } regions=('aa pp' 'bb' 'cc') showarr "${regions[*]}" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ showarr "${regions[@]}" exit
此種情況跟 $* $@比較類(lèi)似,${regions[*]}把參數(shù)打散,作為一個(gè)字符串整體傳遞,原有參數(shù)結(jié)構(gòu)被破壞
${regions[@]}保持了原參數(shù)結(jié)構(gòu),因此$1其實(shí)為 'aa pp'
#!/bin/sh function showarr(){ arr=$1 for b in ${arr[*]};do echo $b done echo "\$1: $1" echo "\$2: $2" echo "\$3: $3" return 0 } regions=('aa pp' 'bb' 'cc') showarr "${regions[*]}" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ showarr "${regions[@]}" exit 0
改進(jìn)后的腳本執(zhí)行情況驗(yàn)證了我們的猜想
結(jié)論: $@ $* ${arr[@]} ${arr[*]} 類(lèi)似,加不加"", 使用@還是*根據(jù)實(shí)際情況選擇
不加""的時(shí)候,@ 和 * 完全一樣,加""時(shí),@可以保持原有參數(shù)結(jié)構(gòu),*將原有參數(shù)結(jié)構(gòu)打亂
shell對(duì) "$@"會(huì)做特殊處理,"$*"可以認(rèn)為是普通字符串
#!/bin/sh for p in "$*";do echo $p done echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for p in "$@";do echo $p done
"$@" 已經(jīng)不是簡(jiǎn)單的字符串了
到此這篇關(guān)于詳解shell數(shù)組${arr[*]}和${arr[@]}區(qū)別的文章就介紹到這了,更多相關(guān)shell ${arr[*]}和${arr[@]}內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux?文件管理命令之dirname?\?find?\?finds?\?in?\?indir詳解
這篇文章主要介紹了linux文件管理命令之dirname\find\finds\in\indir詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Shell執(zhí)行/調(diào)用Java/Jar程序例子的實(shí)例詳解
這篇文章主要介紹了Shell執(zhí)行/調(diào)用Java/Jar程序例子的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08