详解shell数组${arr[*]}和${arr[@]}区别
引用数组中所有元素时${arr[*]}和${arr[@]}是有细微区别的
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
![详解shell数组${arr[*]}和${arr[@]}区别 详解shell数组${arr[*]}和${arr[@]}区别](https://www.devze.com/res/2023/05-10/10/34f6eb00539b5fe5351e83eb695dc071.jpg)
$regions其实只引用了数组的第一个元素
#!/bin/sh
function showarr(){
arr=$1
for b androidin ${arr[*]};do
http://www.devze.com echo $b
done
return 0
}
regions=('aa pp' 'bb' 'cc')
showarr ${regions[*]}
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
showarr ${regions[@]}
exit 0
![详解shell数组${arr[*]}和${arr[@]}区别 详解shell数组${arr[*]}和${arr[@]}区别](https://www.devze.com/res/2023/05-10/10/15781cbb1ab8c7fe754b4281e76d999b.jpg)
引用了数组全部元素,但是showarr函数中arr变量只获取了第一个参数的值 "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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~android~~~~~~~~~~~~
showarr "${regions[@]}"
exit
![详解shell数组${arr[*]}和${arr[@]}区别 详解shell数组${arr[*]}和${arr[@]}区别](https://www.devze.com/res/2023/05-10/10/126f71662fa4d1e697356d43a49b54e1.jpg)
此种情况跟 $* $@比较类似,${regions[*]}把参数打散,作为一个字符串整体传递,原有参数结构被破坏
${regions[@]}保持了原参数结构,因此$1其实为 '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
![详解shell数组${arr[*]}和${arr[@]}区别 详解shell数组${arr[*]}和${arr[@]}区别](https://www.devze.com/res/2023/05-10/10/8a3f180dcba45ec2a021a323589b75f2.jpg)
改进后的脚本执行情况验证了我们的猜想
结论: $@ $* ${arr[@]} ${arr[*]} 类似,加不加"", 使用@还是*根据实际情况选择
不加""的时候,@ 和 * 完全一样,加""时,@可以保持原有参数结构,*将原有参数结构开发者_自动化打乱
shell对 "$@"会做特殊处理,"$*"可以认为是普通字符串
#!/bin/sh
for p in "$*";do
echo $p
done
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
for p in "$@";do
echo $p
done
![详解shell数组${arr[*]}和${arr[@]}区别 详解shell数组${arr[*]}和${arr[@]}区别](https://www.devze.com/res/2023/05-10/10/3741f41667901abe7fd3d7d971ad3e61.jpg)
"$@" 已经不是简单的字符串了
到此这篇关于详解shell数组${arr[*]}和${pythonarr[@]}区别的文章就介绍到这了,更多相关shell ${arr[*]}和${arr[@]}内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
加载中,请稍侯......
精彩评论