循环遍历数组,为数组

时间:2017-12-28 02:06:30

标签: arrays bash

在我的脚本中,我向用户询问一些输入并将其保存到一些变量中。在变量中使用字符串之前,如果它们太长则要剪切它们,并在末尾添加省略号。 因此,我将所有变量放在一个数组中,并通过循环和if语句发送它们,并将新值重新分配给数组中的变量。我尝试了很多方法,没有一个方法有效。以下是一个例子:

preset1="Short string"
preset2="Not long very string"
preset3="A very long string here which we will then cut"

presets=("${preset1}" "${preset2}" "${preset3}")

for x in "${presets[@]}"; do
    if [[ "${#x}" -gt 20 ]]; then
        y="${x:0:20}..."
        presets[$x]="$y"
    fi
done

请帮忙!

2 个答案:

答案 0 :(得分:1)

您必须循环遍历数组的索引才能更改值:

for x in "${!presets[@]}"; do
    str=${presets[$x]}
    (( ${#str} > 20 )) && presets[$x]="${str:0:20}..."
done

也适用于关联和稀疏数组。

对于多样性,您还可以使用参数扩展,如下所示:

for x in "${!presets[@]}"; do
    str=${presets[$x]}
    suffix=${str:20}
    presets[$x]=${str:0:20}${suffix:+...}
done

答案 1 :(得分:1)

您需要使用array[i]语法分配给数组元素:

for ((i = 0; i < ${#presets[@]}; ++i)); do
    x=${presets[i]}
    if [[ "${#x}" -gt 20 ]]; then
        y="${x:0:20}..."
        presets[i]="$y"
    fi
done