Bash中的打印位置和字符

Bash中的打印位置和字符,bash,Bash,我想写一个bash脚本,每行打印position+字符。只允许使用字符A、A、B或B。如果我找到“A”或“A”,脚本将结束。如果我找到“B”或“B”,脚本将继续。字符串的长度必须是无关的 例如: 键入“BbBba”,脚本将逐个通知用户所有位置,并在出现“a”时退出,如下所示: B - position 0 b - position 1 B - position 2 b - position 3 a - position 4 # done 我该怎么做?试试这个: #!/bin/bash in

我想写一个bash脚本,每行打印position+字符。只允许使用字符A、A、B或B。如果我找到“A”或“A”,脚本将结束。如果我找到“B”或“B”,脚本将继续。字符串的长度必须是无关的

例如:

键入“BbBba”,脚本将逐个通知用户所有位置,并在出现“a”时退出,如下所示:

B - position 0
b - position 1
B - position 2
b - position 3
a - position 4 # done 
我该怎么做?

试试这个:

#!/bin/bash

input=
while true; do
    read -p "Enter only A or B: " input
    if [[ $input =~ ^[abAB]+$ ]]; then
        break
    else
        echo "Invalid input. Please try again."
    fi
done

array=`echo $input| fold -w1`
counter=0

for i in ${array[@]}; do
    echo "$i - position $counter"
    counter=$[ $counter + 1  ]
    if [ $i == 'a' -o $i == 'A' ]; then
       break
    fi
done
此代码将首先检查用户输入在第一个
while
循环中是否仅包含
A、B、A
B
。代码的下一部分将把字符串转换成字符数组。最后,它将打印出值及其位置。如果字符包含
A
A
,则脚本将结束


希望这有帮助。

大谷!就这样!谢谢为什么要调用变量
数组
?它根本不是数组。既然扩展名不是数组,为什么要使用它${array[@]}