Linux bash脚本中未显示参数

Linux bash脚本中未显示参数,linux,bash,shell,sh,Linux,Bash,Shell,Sh,所以我必须为一个项目制作一个bash脚本,我们必须以一种可以使用参数的方式来不同地使用它。以bash morse.sh-e Text.txt运行脚本我的脚本不会注册任何参数,这意味着我有一个echo$1命令,当以sh morse.sh-e Text.txt运行脚本时,它不会显示任何内容。脚本将识别我的参数(当然还有许多其他错误,但事实并非如此) #/bin/bash 函数编码{ 回声1美元 输入=$($2 对于((i=0;i),问题在于命令echo将-e参数作为自己的参数。请检查下面的示例,您的

所以我必须为一个项目制作一个bash脚本,我们必须以一种可以使用参数的方式来不同地使用它。以bash morse.sh-e Text.txt运行脚本我的脚本不会注册任何参数,这意味着我有一个echo$1命令,当以sh morse.sh-e Text.txt运行脚本时,它不会显示任何内容。脚本将识别我的参数(当然还有许多其他错误,但事实并非如此)

#/bin/bash
函数编码{
回声1美元
输入=$($2

对于((i=0;i),问题在于命令echo将-e参数作为自己的参数。请检查下面的示例,您的参数在那里并且有效

echo "all parameters => $*"

if [ "-e" == "$1" ]; then
   echo Fora Temer
fi
您应该看到文本:Fora Temer


寻求改进您的参数处理。

我会这样写,所以您只需要调用sed一次:

morse() {
    local -A morse=(
        [A]='.-'          [J]='.---'        [S]='...'         [2]='..---'
        [B]='-...'        [K]='-.-'         [T]='-'           [3]='...--'
        [C]='-.-.'        [L]='.-..'        [U]='..-'         [4]='....-'
        [D]='-..'         [M]='--'          [V]='...-'        [5]='.....'
        [E]='.'           [N]='-.'          [W]='.--'         [6]='-....'
        [F]='..-.'        [O]='---'         [X]='-..-'        [7]='--...'
        [G]='--.'         [P]='.--.'        [Y]='-.--'        [8]='---..'
        [H]='....'        [Q]='--.-'        [Z]='--..'        [9]='----.'
        [I]='..'          [R]='.-.'         [1]='.----'       [0]='-----'
    )
    local sed_commands=()
    for char in "${!morse[@]}"; do
        sed_commands+=( -e "s/$char/${morse[$char]}\\t/gi" )
    done
    # let sed consume stdin
    sed "${sed_commands[@]}"
}
那你就可以了

$ echo "Hello world" | morse
....    .       .-..    .-..    ---      .--    ---     .-.     .-..    -..
直接的问题是(显然,基于注释),您没有将参数传递给您声明的函数(尽管您没有发布调用代码,因此这是模糊的推测)

但是一个更紧迫的问题是,您正在调用
sed
为每个字符重写整个文件一次。这是一个可怕的、几乎是犯罪的效率低下,而且根本不是您如何使用
sed
。这是一个流编辑器;您使用它的方式是使用
sed
语言中指定的脚本调用它一次fy应在文件上执行哪些更改。如下所示:

sed 's/[Aa]/.-\t/g
    s/[Bb]/-...\t/g
    s/[Cc]/-.-.\t/g
    # etc etc
    s/ //g' filename

一旦您确信脚本的输出或多或少符合您的预期,请添加
-i
选项;我可能不太理解您方法的每一个细微差别(特别是在最后,重复替换所有文本文件中每行的第一个空格,在莫尔斯输出中找到单词的次数,我明白了吗?)

如果没有实际代码和您看到的实际错误,很难帮助您。请参阅。具体来说,
echo-e
在不同的shell中可能会有不同的工作方式。@MarkPlotnick这不是echo命令我的问题。在我的代码中,没有任何地方可以识别$1-e@shellter下面是codeFunction参数与脚本argum不同的示例ents.yeah这对-e参数正确。我已经在代码上方发布了。你能看到它有什么问题吗?我看到Glenn Jackman在我撰写回复时发布了一个很好的封装版本。他的代码最终也做了同样的事情,虽然更加模糊。是缺少小写字母,还是缺少大小写转换?
sed 's/[Aa]/.-\t/g
    s/[Bb]/-...\t/g
    s/[Cc]/-.-.\t/g
    # etc etc
    s/ //g' filename