关于bash:如何遍历Unix Shell中字符串中的每个字母

How to iterate through each letter in a string in Unix Shell

本问题已经有最佳答案,请猛点这里访问。

我正在尝试通过read命令迭代作为输入的字符串。我试着输出每个字母的编号,然后用一个循环依次输出每个字母。例如,如果用户输入"毕加索",则输出应为:

字母1:P字母2:I字母3:C字母4:A字母5:S字母6:S字母7:O

这是我的当前代码:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

# Prompt a user to enter a word and output each letter in turn.


read -p"Please enter a word:" word

for i in $word
do
 echo"Letter $i: $word"
done

我应该将输入放到数组中吗?我对编程循环还是个新手,但我发现不可能找出逻辑。

有什么建议吗?谢谢。


将dtmilano和patrat的答案结合起来,您将得到:

1
2
3
4
5
6
read -p"Please enter a word:" word

for i in $(seq 1 ${#word})
do
 echo"Letter $i: ${word:i-1:1}"
done

$word提供字符串的长度。


使用子字符串运算符

1
 ${word:i:1}

获得单词的第i个特征。


查看bash中的seq机制

例如:

1
seq 1 10

会给你

1
1 2 3 4 5 6 7 8 9 10

你可以试试字母

1
echo {a..g}

结果

1
 a b c d e f g

现在你该解决你的问题了