首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组上的Shell参数展开

数组上的Shell参数展开
EN

Stack Overflow用户
提问于 2016-06-08 09:11:09
回答 2查看 3.8K关注 0票数 6

假设我将一些数据读入一个Bash数组:

代码语言:javascript
复制
$ IFS=" " read -a arr <<< "hello/how are/you iam/fine/yeah"

现在,我希望为数组中的每个元素打印第一个/-sliced字段。

我所做的就是循环这些元素,并使用shell参数展开从第一个/中剥离所有内容。

代码语言:javascript
复制
$ for w in "${arr[@]}"; do echo "${w%%/*}"; done
hello
are
iam

但是,由于printf允许我们在一个表达式中打印数组的全部内容:

代码语言:javascript
复制
$ printf "%s\n" "${arr[@]}"
hello/how
are/you
iam/fine

..。我想知道在使用${w%%/*}时是否有一种方法可以使用shell参数展开printf,而不是循环所有元素并对每个元素执行它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-08 09:15:08

哦,我刚刚找到了方法:只需正常使用参数展开,只针对${arr[@]}而不是${arr}

代码语言:javascript
复制
$ IFS=" " read -a arr <<< "hello/how are/you iam/fine/yeah"
$ printf "%s\n" "${arr[@]%%/*}"
hello
are
iam

格雷格的维基在这方面发挥了作用:

数组上的参数展开 BASH数组非常灵活,因为它们与其他shell扩展很好地集成在一起。可以在标量或单个数组元素上执行的任何参数扩展都可以同样地应用于整个数组或位置参数集,以便所有成员一次展开,可能通过在每个元素上映射额外的操作。 $ a=(alphaβγ)#通过复合赋值$ echo "${a@#a}“# chop 'a‘从每个成员的开头分配给我们的基数组

票数 7
EN

Stack Overflow用户

发布于 2021-01-21 14:17:02

基于@fedorqui的答案,如果OP想输出数组而不是字符串,这对我来说是有效的-

代码语言:javascript
复制
a=(alpha beta gamma)
newArr=( "${a[@]//a/f}" )

我亲自来到这篇文章,希望在对数组的每个元素进行替换之后,输出一个数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37698108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档