如何防止错误破坏循环

how to prevent an error from breaking a loop

如果字符串包含的字符数少于您尝试使用此命令删除的字符数: (本例中为 4 个字符)

variable1=${string::-4}

并且此命令在循环内,错误导致循环中断

如果没有先 运行 检查字符串是否超过 4 个字符的命令,是否有任何方法可以防止循环中断?

..就像“忽略错误并继续”命令一样?

这可能是 side-effect 使用 set -eset -o errexit 退出错误。

如果索引对于输入字符串无效,则无法阻止此字符串索引引发错误。

因此您必须实际检查索引在字符串中是否有效,例如:

#!/usr/bin/env bash

set -o errexit

for string in 'Hello abcd' '42' 'worldfour' '!here'; do
  if [ ${#string} -ge 4 ]; then
    variable1=${string::-4}
  else
    variable1=
  fi
  printf '%s' "$variable1"
done
echo