【问题标题】:Bash: Split each letter of a stringBash:拆分字符串的每个字母
【发布时间】:2014-11-13 22:17:49
【问题描述】:

如何拆分字符串的每个字母并在 case 语句中对其进行评估?我希望能够输入诸如“TEST TEST”之类的回复并返回:-....-SP-....-

它基本上是一个莫尔斯电码翻译器。这就是我所拥有的。我认为问题出在 printf 语句中,但我无法弄清楚。它没有正确解析单个字母。它只返回 E 值。

#!/bin/bash
read -p "What would you like to translate?"

for ((i=0; i<${#REPLY};i++))
  do
case $REPLY in
*E*)
  echo "." ;;
*S*)
  echo "..." ;;
*T*)
  echo "-" ;;
*' '*)
  echo "SP" ;;
esac
   printf "code: %s" "{$REPLY:i:1}]}" {$REPLY:i:1}
done

【问题讨论】:

  • ${REPLY:i:1},而不是 {$REPLY:i:1} 在您的 printfs 中,顺便说一句。
  • 另外,如果您一次迭代一个字符,则无需测试*E*),而只需测试E)

标签: string bash split


【解决方案1】:

改变

case $REPLY in

case ${REPLY:i:1} in

...提取单个字符。

【讨论】:

    【解决方案2】:

    尝试这样做:

    $ str=foobar; for ((i=0; i<${#str}; i++)); do echo ${str:$i:1}; done
    f
    o
    o
    a        
    r
    

    $ fold -w1 <<< foobar
    f
    o
    o
    a        
    r
    

    【讨论】:

      猜你喜欢
      • 2021-04-14
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      相关资源
      最近更新 更多