当前位置: 首页 > wzjs >正文

南阳网站怎么推广seo关键词优化推广

南阳网站怎么推广,seo关键词优化推广,请问去哪里学编程比较正规,wordpress新闻404在bash shell 函数传递数组的问题 最近 写shell 脚本中,遇到一个 往函数里面 传递数组作为参数的问题, 特此来记录一下。 在函数中如何 传递 传递数组变量 ? # !/bin/bash # array variable to function test # function testit {# 定义变量 local …

在bash shell 函数传递数组的问题

最近 写shell 脚本中,遇到一个 往函数里面 传递数组作为参数的问题, 特此来记录一下。

在函数中如何 传递 传递数组变量 ?

# !/bin/bash
# array variable to function test
# 
function testit {# 定义变量 local newarray# 重新构建一个新的数组 newarray=(`echo "$@"`)echo "The new array value is: ${newarray[*]}"
}myarray=(1 2 3 4 5)
echo "The original array is ${myarray[*]}"
# 注意这里传递方式 是把整个数组进行传递
testit ${myarray[*]}

这种方式 就是把整个数组 全部传入, 在函数内部重新构建 这个数组。 缺点也很明显,如果我需要传递两个数组呢? 如果想传递两个变量,有数组和其他的变量呢?

上面的例子会有潜在的问题,如果数组元素 本身是有空格的,这样在重建数组的时候 会有问题,来看下面的例子:

# !/bin/bash
# array variable to function test
#
function testit {# 定义变量local newarray# 重新构建一个新的数组newarray=($(echo "$@"))# newarray=("$@")#   echo "The new array value is: ${newarray[*]}"for value in "${newarray[@]}"; doecho "array item: $value"doneecho "数组长度为: ${#newarray[@]}"}myarray=("文件 1" "文件 2" "文件 3")echo "The original array is ${myarray[*]}"
# 注意这里传递方式 是把整个数组进行传递
# testit ${myarray[*]}
testit "${myarray[@]}"

上面代码运行结果如下:

sh  local_test.sh      
The original array is 文件 1 文件 2 文件 3
array item: 文件
array item: 1
array item: 文件
array item: 2
array item: 文件
array item: 3
数组长度为: 6

我们发现数组项被拆分了, 文件 , 1 ,文件, 2 ,文件,3 这显然不是我们希望的样子。

这个问题的关键 就是newarray 生成的时候 默认是空格作为划分的。 echo 默认是以空格作为划分的。

function testit {# 定义变量local newarray# 重新构建一个新的数组# 错误写法 # newarray=($(echo "$@"))# 直接使用 "$@" 来构建数组即可newarray=("$@")#   echo "The new array value is: ${newarray[*]}"for value in "${newarray[@]}"; doecho "array item: $value"doneecho "数组长度为: ${#newarray[@]}"}myarray=("文件 1" "文件 2" "文件 3")
testit "${myarray[@]}"

结果如下:

sh  local_test.sh      
array item: 文件 1
array item: 文件 2
array item: 文件 3
数组长度为: 3

此时的结果就是对的, 数组的元素 没有被拆分,并且数组的长度是3 ,没有问题。

这里要注意几点:

第一点: 在调用 testit 函数的时候 需要传递 "${myarray[@]}" 而不要传递 "${myarray[*]}" 这两个参数 是有一点区别的。

第二点 构建数组的时候: newarray=("$@") 使用这种方式, 不要使用echo 进行打印。

"${myarray[@]}" vs. "${myarray[*]}" 这两个的区别 ?

表达式含义特点说明
"${myarray[@]}"把数组每个元素作为独立的参数传递推荐使用
"${myarray[*]}"把整个数组当作一个字符串,用 IFS 拼接容易出错

看个例子 :


myarray=("apple" "banana cherry" "date")
for item in "${myarray[@]}"; doecho "Item: '$item'"
doneecho "----------{myarray[*]}-------------"
for item in "${myarray[*]}"; doecho "Item: '$item'"
done

运行结果:

sh  local_test.sh      
Item: 'apple'
Item: 'banana cherry'
Item: 'date'
----------{myarray[*]}-------------
Item: 'apple banana cherry date'

"${myarray[*]}" 会把整个数组的元素当成一个字符串进行传递。

"${myarray[@]}" 这种方式 就不会出现 这个问题,把数组的每一项单独 传递。

场景推荐写法原因
遍历数组元素"${myarray[@]}"正确处理带空格的元素
获取所有元素拼接成字符串"${myarray[*]}"明确需要字符串拼接时才使用
传递多个参数给函数/命令"${myarray[@]}"每个元素作为一个独立参数

当然 如果你的 bash shell 的版本 比较高,version 大于等于5.0 ,那么可以有更好的传递方式,使用 nameref 这种特性,来方便的传递数组,等有时间我在进行补充说明吧。

分享快乐,留住感动. '2025-07-07 22:32:52' --frank
http://www.dtcms.com/wzjs/220496.html

相关文章:

  • 技术支持骏域建设网站公众号推广一个6元
  • 北京欢迎你网站制作公司品牌推广的三个阶段
  • vs做网站如何放背景图seo策略是什么意思
  • 创建自由摄影师的网站内容山西seo
  • 做网店有哪些网站建个网站费用多少
  • 做天猫网站要多少钱百度权重是什么
  • 做外贸有哪些网站比较好亚洲精华国产精华液的护肤功效
  • 外贸网站建站电话多少360建网站
  • 网站开发制作公司排行广告信息发布平台
  • 网站建设和管理情况调查表网站测速
  • 网站专题页面策划厦门网络推广
  • 玩具租赁系统网站开发与实现万词优化
  • 公司的网站怎么做推广方案企业网站制作哪家好
  • 对于网站建设的体会怎样进入12345的公众号
  • 网站开发与管理厦门seo搜索引擎优化
  • 连云港集团网站建设网络推广员是干什么的
  • 平度市疫情最新消息专业网站seo推广
  • 网站的建设分析大数据营销推广精准粉
  • 专门做节日预购网站有哪些100个免费推广b站
  • 阿里云做的网站如何发布苏州关键词优化seo
  • 苏州比较好的软件公司有哪些网站结构优化
  • 整形医院网站制作深圳全网营销平台排名
  • 做货源的网站2021谷歌搜索入口
  • 做网站要学什么语言公司网站建设费
  • 为什么辽宁省城乡建设厅网站打不开怎样自己制作网站
  • html商务网站模板qq刷赞网站推广快速
  • 怎样做批发网站在百度上怎么发布信息
  • 网站建设四川推来客网站系统实体店100个营销策略
  • 没有做防注入的网站怎么把产品放到网上销售
  • l礼品文化网站建设百度关键字优化精灵