循环遍历数组,为数组中的变量赋值

问题描述 投票:1回答:2

在我的脚本中,我向用户询问一些输入并将其保存到一些变量中。在变量中使用字符串之前,如果它们太长则要剪切它们,并在末尾添加省略号。因此,我将所有变量放在一个数组中,并通过循环和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

请帮忙!

arrays bash
2个回答
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

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
© www.soinside.com 2019 - 2024. All rights reserved.