Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 为什么我的摩尔斯电码转换器没有显示输出?_Bash_Shell_Unix_Morse Code - Fatal编程技术网

Bash 为什么我的摩尔斯电码转换器没有显示输出?

Bash 为什么我的摩尔斯电码转换器没有显示输出?,bash,shell,unix,morse-code,Bash,Shell,Unix,Morse Code,我想做一个摩尔斯电码转换器,它可以将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 mo

我想做一个摩尔斯电码转换器,它可以将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
#/bin/bash
回声“你好,欢迎使用莫尔斯电码转换器!!”
编码(){
申报-摩尔斯电码
莫尔斯[A]=“-”;
莫尔斯[B]=“-…”;
莫尔斯[C]=“-。-”;
莫尔斯[D]=“-…”;
莫尔斯[E]=“;
莫尔斯[F]=“.-”;
莫尔斯[G]=“-”;
莫尔斯[H]=“…”;
摩尔斯[I]=”;
莫尔斯[J]=“----”;
莫尔斯[K]=“-.-”;
莫尔斯[L]=“-…”;
莫尔斯[M]=“-”;
莫尔斯[N]=“-”;
莫尔斯[O]=“--”;
莫尔斯[P]=“-”;
莫尔斯[Q]=“--.-”;
莫尔斯[R]=“-”;
摩尔斯电码=“…”;
莫尔斯[T]=“-”;
莫尔斯[U]=“.-”;
莫尔斯[V]=“…-”;
莫尔斯[W]=“--”;
莫尔斯[X]=“-…-”;
莫尔斯[Y]=“-.-”;
莫尔斯[Z]=“--…”;
莫尔斯[1]=“----”;
莫尔斯[2]=”。--“;
莫尔斯[3]=“…”;
莫尔斯[4]=“…-”;
莫尔斯[5]=“…”;
莫尔斯[6]=“-……”;
莫尔斯[7]=“-…”;
莫尔斯[8]=“--…”;
莫尔斯[9]=“----”;
莫尔斯[0]=“----”;
对于((k=0;k<${morse};k=k+1)),do
回声“${morse}”
完成
}
解码(){
声明-一封信
字母[.-]=“A”;
字母[-…]=“B”;
字母[-.-.]=“C”;
字母[-..]=“D”;
字母[.]=“E”;
字母[…-.]=“F”;
字母[-.]=“G”;
字母[…]=“H”;
字母[…]=“I”;
字母[.--]=“J”;
字母[-.-]=“K”;
字母[.-…]=“L”;
字母[--]=“M”;
字母[-.]=“N”;
字母[--]=“O”;
字母[.-.]=“P”;
字母[-.-]=“Q”;
字母[.-.]=“R”;
字母[…]=“S”;
字母[-]=“T”;
字母[…-]=“U”;
字母[…-]=“V”;
字母[.-]=“W”;
字母[-..-]=“X”;
字母[-.-]=“Y”;
字母[--…]=“Z”;
字母[----]=“0”;
字母[.---]=“1”;
字母[…---]=“2”;
字母[…--]=“3”;
字母[……-]=“4”;
字母[…]=“5”;
字母[-..]=“6”;
字母[…]=“7”;
字母[--…]=“8”;
字母[---.]=“9”;
对于((i=0;i<${morse};i=i+1)),do
回音“${字母:i}”
完成
}
如果[$1=“-e”];然后
而IFS=read-r行| |[[-n“$line”]];做
echo“文本为:$line”
回声“摩尔斯电码是:
完成<“$2”
编码“$@”
elif[$1=“-d”];然后
而IFS=read-r line1 | |[[-n“$line1]”;做
echo“摩尔斯电码是:$line1”
echo“翻译为:
完成<“$2”
解码“$@”
其他的
echo“请使用-e或-d重试”
fi

我可以立即看到一些东西:您使用
莫尔斯
作为持有
$3
的变量和关联数组
echo$($3)
正在尝试将
$3
的内容作为命令运行;调用函数时,函数会获得自己的位置参数,因此
$3
将不是您在函数中所期望的;你应该引用更多的参数展开式,函数中的逻辑似乎是反向的。
完成后的所有事情都没有任何效果。我们要求一个问题包含一个——描述特定问题的尽可能短的代码。不要把你的整个程序都扔进一个问题中——找出它失败的具体地方,并编写尽可能短的脚本来演示同样的问题……如果你想更好地找出某个程序失败的地方和原因,让你编写这个复制程序,可以使用
PS4=':${LINENO}+'bash-x yourscript
运行脚本时,它执行的每个命令都会被记录下来,这样您就可以准确地跟踪它的实际行为第一次开始偏离预期的地方。