2041_21T1.Q4

如果只让用之前学过的方法的话,就只能手动这样提取前后缀然后拼接了。对于$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