如果只让用之前学过的方法的话,就只能手动这样提取前后缀然后拼接了。对于$2的数字的匹配是贪婪的,会匹配到最后一位数字。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #!/bin/dash
# 提取前缀和后缀 以及中间的数字 叠加并拼接
prefix=$(echo "$1" | sed 's/[0-9].*//') suffix=$(echo "$1" | sed 's/.*[0-9]//')
# 提取数字 n=$(echo "$1" | tr -dc '0-9') m=$(echo "$2" | tr -dc '0-9')
i="$n"
while [ "$i" -le "$m" ]; do echo "${prefix}${i}${suffix}" i=$((i + 1)) done
|
还有一种方法是shell参数扩展,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #!/bin/sh
# 1. 提取前缀 (匹配从第一个数字开始到末尾的所有内容,并将其删掉) prefix="${1%%[0-9]*}"
# 2. 提取后缀 (匹配从开头到最后一个数字的所有内容,并将其删掉) suffix="${1##*[0-9]}"
# 3. 提取起始数字 n (从 $1 中先剔除前缀,再剔除后缀) n_temp="${1#$prefix}" n="${n_temp%$suffix}"
# 4. 提取结束数字 m (同样的操作应用在 $2 上) m_temp="${2#$prefix}" m="${m_temp%$suffix}"
# 5. 使用标准的 POSIX while 循环进行递增输出 i="$n" while [ "$i" -le "$m" ]; do echo "${prefix}${i}${suffix}" i=$((i + 1)) done
|