在我的脚本中,我向用户询问一些输入并将其保存到一些变量中。在变量中使用字符串之前,如果它们太长则要剪切它们,并在末尾添加省略号。因此,我将所有变量放在一个数组中,并通过循环和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
请帮忙!
您需要使用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
您必须循环遍历数组的索引才能更改值:
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