Looping

反转字符串
反转字符串 在 Bash 中

In a bash loop, we are looping over the indices of the characters. Bash strings and arrays use zero-based indexing.

reversed=''
for ((i = 0; i < ${#string}; i++)); do
    reversed="${string:i:1}$reversed"
done
  • We loop from zero up to (but not including) the string length (${#string}).
  • Extracting the character at index i is done with the ${var:offset:length} parameter expansion.
  • We prepend the character to the accumulating variable to reverse the string.

Finding the string length is a surprisingly expensive operation in bash (more details in the Performance article). We don't have to re-calculate it for every loop iteration, just do it once.

reversed=''
len=${#string}
for ((i = 0; i < len; i++)); do
    reversed="${string:i:1}$reversed"
done

An alternate way to calculate it just once is to loop backwards.

reversed=''
for ((i = ${#string} - 1; i >= 0; i--)); do
    reversed+="${string:i:1}"
done
  • Here, we start the loop at one less than the string length, which is the index of the last character, and we loop down to (and including) zero.
  • Since we're accessing the characters in the reverse order, we'll append to the accumulating variable.

Another performance note: accessing each character with this parameter expansion is still slow: bash has to walk the string until reaching the desired index. The most efficient solution is discussed in the Performance article).

2026年09月23日 · 觉得有用?

Bash 中 反转字符串 的其他解法

社区解决这道练习的其他方式