【发布时间】:2018-02-01 13:22:19
【问题描述】:
我想做一个莫尔斯电码转换器,将txt文件中的字母转换为莫尔斯电码,将txt文件中的莫尔斯电码转换为字母。
执行方式是./morse.sh -e Text.txt进行编码,./morse.sh -d Morse_text.txt进行解码。我唯一的问题是由于某种原因输出没有显示在屏幕上。
这里是代码。如果我犯了错误,请告诉我。
#!/bin/bash
echo "Hello,welcome to the Morse Code Converter!!"
encode(){
declare -A morse
morse[A]=".-";
morse[B]="-...";
morse[C]="-.-.";
morse[D]="-..";
morse[E]=".";
morse[F]="..-.";
morse[G]="--.";
morse[H]="....";
morse[I]="..";
morse[J]=".---";
morse[K]="-.-";
morse[L]=".-..";
morse[M]="--";
morse[N]="-.";
morse[O]="---";
morse[P]=".--.";
morse[Q]="--.-";
morse[R]=".-.";
morse[S]="...";
morse[T]="-";
morse[U]="..-";
morse[V]="...-";
morse[W]=".--";
morse[X]="-..-";
morse[Y]="-.--";
morse[Z]="--..";
morse[1]=".----";
morse[2]="..---";
morse[3]="...--";
morse[4]="....-";
morse[5]=".....";
morse[6]="-....";
morse[7]="--...";
morse[8]="---..";
morse[9]="----.";
morse[0]="-----";
for (( k = 0; k < ${#morse}; k=k + 1 )); do
echo "${morse}"
done
}
decode(){
declare -A letter
letter[.-]="A";
letter[-...]="B";
letter[-.-.]="C";
letter[-..]="D";
letter[.]="E";
letter[..-.]="F";
letter[--.]="G";
letter[....]="H";
letter[..]="I";
letter[.---]="J";
letter[-.-]="K";
letter[.-..]="L";
letter[--]="M";
letter[-.]="N";
letter[---]="O";
letter[.--.]="P";
letter[--.-]="Q";
letter[.-.]="R";
letter[...]="S";
letter[-]="T";
letter[..-]="U";
letter[...-]="V";
letter[.--]="W";
letter[-..-]="X";
letter[-.--]="Y";
letter[--..]="Z";
letter[-----]="0";
letter[.----]="1";
letter[..---]="2";
letter[...--]="3";
letter[....-]="4";
letter[.....]="5";
letter[-....]="6";
letter[--...]="7";
letter[---..]="8";
letter[----.]="9";
for (( i = 0; i < ${#morse}; i=i + 1 )); do
echo "${letter:i}"
done
}
if [[ $1 = "-e" ]]; then
while IFS= read -r line || [[ -n "$line" ]] ; do
echo "The text is : $line"
echo "Morse code is:"
done < "$2"
encode "$@"
elif [[ $1 = "-d" ]]; then
while IFS= read -r line1 || [[ -n "$line1" ]] ; do
echo "The Morse code is : $line1"
echo "The translation is:"
done < "$2"
decode "$@"
else
echo "Please try again using -e or -d"
fi
【问题讨论】:
-
我可以立即看到一些事情:您将
morse用作包含$3的变量和关联数组;echo $($3)正在尝试将$3的内容作为命令运行;当您调用一个函数时,该函数会获得自己的位置参数,因此$3不会是您在函数中所期望的;你应该引用更多的参数扩展。 -
您的函数中的逻辑似乎是倒退的。
done之后的所有内容都没有任何效果。 -
我们要求问题包含minimal reproducible example -- 描述特定问题的尽可能短的代码。不要只是把你的整个程序放到一个问题中——找到它失败的具体地方,并编写尽可能短的脚本来演示同样的问题。
-
...如果您想更好地找出失败的位置和方式,让您编写该复制器,请使用
PS4=':${LINENO}+' bash -x yourscript运行脚本,并记录它执行的每个命令,以便您可以跟踪确切地说,它的实际行为首先开始偏离您的预期。
标签: bash shell morse-code