【问题标题】:Arrays in Bash ShellBash Shell 中的数组
【发布时间】:2020-07-10 20:33:47
【问题描述】:

我想写一个shell脚本来得到以下输出:

$ Enter String: a2b3

aabbb

我尝试使用for 循环和数组,但循环计数与数组索引混淆,并在数组中留下空元素,因此无法按要求打印出数组。

使用的脚本:

echo "Enter your alphanumeric string: "
read a
n=${#a}

for (( i=0;i<n;i++ ))
do
string[i]=${a:i:1}

if [[ ${string[i]} =~ [a-zA-Z] ]]
then
alpha[i]=${string[i]}
elif [[ ${string[i]} =~ [0-9] ]]
then

if [[ ${string[i+1]} =~ [0-9] ]]
then
num[i]=${string[i]}${string[i+1]}
elif ! [[ ${string[i+1]} =~ [0-9] ]]
then
num[i]=${string[i]}
fi

fi
done

n=${#num[*]}
for (( i=0;i<n;i++ ))
do
echo num[$i] = ${num[i]}
done

n=${#alpha[*]}
for (( i=0;i<n;i++ ))
do
echo alpha[$i] = ${alpha[i]}
done

我得到相同的输出:

$ sh Q1.sh
Enter your alphanumeric string: 
a6b3
num[0] =
num[1] = 6
alpha[0] = a
alpha[1] =

【问题讨论】:

标签: arrays linux bash shell


【解决方案1】:

将元素附加到数组的更好方法是使用array+=(...)。这样您就不必担心左侧有正确的索引。

alpha+=("${string[i]}")
num+=("${string[i]}" "${string[i+1]}")

【讨论】:

  • 感谢您的解决方案。但恐怕它并不能完全解决问题。 Enter your alphanumeric string: v4b3 num[0] = 4 num[1] = 3 alpha[0] = v alpha[1] = b vvvvbbb **$ sh Q1.sh** Enter your alphanumeric string: a12b20 num[0] = 1 num[1] = 2 num[2] = 2 num[3] = 0 alpha[0] = a alpha[1] = b abb
  • 处理两位数是一个不同的问题。
  • 如果你也能帮助我,那就太好了。谢谢。
  • 我建议将其作为一个单独的问题发布。它需要一个不同的、更复杂的答案,而且 Stack Overflow 并不是为解决多个问题的来回调试会话而设计的。
猜你喜欢
  • 2014-12-24
  • 2013-03-26
  • 2020-03-16
  • 1970-01-01
  • 2014-02-02
  • 2021-11-05
  • 2014-12-14
  • 1970-01-01
  • 2019-06-30
相关资源
最近更新 更多