【发布时间】:2021-10-08 04:13:53
【问题描述】:
在seeing this question 之后,我决定组合一个函数来删除数组中的空元素,以防它为某人节省几秒钟的时间。
有没有办法将动态命名的输入数组变量作为函数的输出返回(或导出)?
理想情况下
- 用户来电:
removeArrayBlanks "newArrayName" "arrayItem1" "" "arrayItem2"... - 该函数取消设置旧数组并创建:
${newArrayName[@]},它扩展为"arrayItem1" "arrayItem2",没有任何空白项或非顺序索引号
另外,是否有人对该功能有任何优化/建议?我已经包含了下面的功能。谢谢!
removeArrayBlanks() {
# Usage: Provide array as input, store output as array.
# Example 1: mapfile -t lastArray < <(removeArrayBlanks "hate" "" "empty" "array" "items")
# Example 2: mapfile -t lastArray < <(removeArrayBlanks "${inputArray[@]}")
[[ $# -lt 2 ]] && echo "Usage: Provide array as an argument." && exit 1 # Ensure input is array
tempArray=( "$@" ) # Rebuild array from inputs
for i in "${!tempArray[@]}"; do
[[ ! -z "${tempArray[$i]}" ]] && finalArray+=( "${tempArray[$i]}" ) # Add non-empty strings
done && printf '%s\n' "${finalArray[@]}" && unset tempArray && unset finalArray
}
【问题讨论】:
-
除非你声明它是本地的,否则函数中分配的变量在主脚本中是可见的,所以你不需要返回它。
-
您想从原始数组中删除“空白”,还是创建一个没有“空白”的全新数组?
-
! -z看起来很奇怪。 -
@Barmar ty,很难从用户输入中获取名为
$1的新数组。我找不到一种简单的方法来“更新”输入数组,而无需强制用户必须调用新的数组名称。 -
@markp-fus 试图从输入数组中删除空白。而且,理想情况下,不必重命名它或声明一个新数组。
标签: arrays bash shell reference