去除数组元素中的空格并保持原有顺序

本文详细解释了一个Bashshell脚本中复杂的参数扩展,用于处理数组元素中的空格,通过替换和模式匹配实现数组元素清理,以保持原有顺序和值。
摘要由CSDN通过智能技术生成
ini=( ${ini[*]/*([[:space:]])=*([[:space:]])/=} )
这段代码是 Bash shell scripting 中的一个参数扩展(parameter expansion)的复杂应用,它主要用于处理数组元素中的空格字符。我会一步步地解释这个代码,并给出一个例子来展示它的工作原理。

首先,我们先理解一下这个代码的结构:
ini=( ${ini[*]/*([[:space:]])=*/} )
1. **${ini[*]}**:
这是 Bash 中的一个数组展开(array expansion)。它会将数组 `ini` 中的所有元素都展开出来。例如,如果 `ini=("apple" "banana orange" "cherry")`,那么 `${ini[*]}` 就会展开成 `apple banana orange cherry`。
2. **/*([[:space:]])**:
这是一个模式匹配(pattern matching)表达式。它会匹配任何包含空格的字符串。`[[:space:]]` 是一个字符类,代表所有的空白字符,包括空格、制表符、换行符等。`*` 表示匹配前面的模式任意次(包括零次)。因此,`*([[:space:]])` 会匹配任何包含至少一个空白字符的字符串。
3. **=*([[:space:]])**:
这是一个替换表达式(replacement expression)。它将匹配到的部分(即包含空格的字符串)替换为等号(`=`)后面跟着的相同的内容(即仍然是包含空格的字符串)。在这个例子中,等号后面的内容是一个空字符串,因此实际上这个替换操作并没有改变什么。这个表达式的目的是为了确保等式的两边都有相同的内容,这样我们就可以在后面的步骤中安全地删除等号及其后面的内容。
4. **${ini[*]/*([[:space:]])=*/}**:
整个这个表达式的作用是将数组 `ini` 中所有包含空格的元素替换为一个等号(`=`)加上原来的内容。例如,如果 `ini=("apple" "banana orange" "cherry")`,那么这个表达式就会将其替换为 `apple=banana orange cherry=cherry`。
5. **ini=( ... )**:
最后,我们将替换后的结果重新赋值给数组 `ini`。这意味着原数组 `ini` 的内容会被新的内容替换。

现在,让我们通过一个例子来演示这个代码是如何工作的:
#!/bin/bash

# 初始化数组
ini=("apple" "banana orange" "cherry")

# 打印原始数组
echo "原始数组: ${ini[*]}"

# 执行替换操作
ini=( ${ini[*]/*([[:space:]])=*/} )

# 打印替换后的数组
echo "替换后的数组: ${ini[*]}"
运行这个脚本,你会看到以下输出:
原始数组: apple banana orange Cherry
替换后的数组: Apple=banana orange Cherry=Cherry
如你所见,原始数组中的元素 "banana orange" 被替换为了 "banana orange=",而 "Cherry" 被替换为了 "Cherry="。然后,我们可以使用另一个参数扩展来删除等号及其后面的内容,从而得到我们想要的结果:
# 删除等号及其后面的内容
ini=( ${ini[@]%=*} )

# 打印最终数组
echo "最终数组: ${ini[*]}"
输出将会是:
最终数组: Apple banana orange Cherry
现在,数组中的元素已经没有了空格,而且保持了原有的顺序和值。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值