Shell 为什么echo函数不在这里打印任何内容?

Shell 为什么echo函数不在这里打印任何内容?,shell,if-statement,echo,Shell,If Statement,Echo,在这个shell脚本中,我创建了3个函数。 它需要2个命令行参数。首先是操作类型,其次是字符串对其执行操作。。 在这里,任何函数中的echo命令都不会打印任何内容 任何帮助都将不胜感激 clear lower() { echo $2 | tr "[A-Z]" "[a-z]" } upper() { echo $2 | tr "[a-z]" "[A-Z]" } proper() { echo $2 | sed 's/.*/\L&/; s/[a-z]*/\u&/g' } #

在这个shell脚本中,我创建了3个函数。 它需要2个命令行参数。首先是操作类型,其次是字符串对其执行操作。。 在这里,任何函数中的echo命令都不会打印任何内容

任何帮助都将不胜感激

clear

lower()
{
echo $2 | tr "[A-Z]" "[a-z]"
}

upper()
{
echo $2 | tr "[a-z]" "[A-Z]"
}

proper()
{
echo $2 | sed 's/.*/\L&/; s/[a-z]*/\u&/g'
}


#echo "Enter The Option and then the string to perform the operation:"
echo $1 $2 '> echo $1 $2 '

if [ $1 = "-l" ]
then
lower $2
elif [ $1 = "-u" ]
then
upper $2
elif [ $1 = "-p" ] 
then 
proper $2
fi

在每个函数中,将
$2
替换为
$1

  lower()
  {
    echo $1 | tr "[A-Z]" "[a-z]"  
  }
对于脚本和函数,
$1
表示第一个参数,
$2
表示第二个参数。如果要为脚本提供两个参数,但为函数提供一个参数,那么应该是

$ cat test.sh
#!/bin/bash

echo "$1" "$2"

func_echo(){
 echo "func $1"
}
# Call the function
func_echo $2
导致:

$ ./test.sh "first" "second"
first second
func second

在函数外部,
$1
$2
等引用程序的命令行参数。在函数内部,它们是函数的参数。将所有的
echo$2
更改为
echo$1

  lower()
  {
    echo $1 | tr "[A-Z]" "[a-z]"  
  }
风格改进:

  • 默认情况下,始终引用变量展开式。写
    “$1”
    “$2”
    而不是只写
    $1
    $2
    。这样,如果这些参数有空格或glob,它们将扩展为一个单词,而不是多个单词

  • 底部的
    if
    /
    elif
    链可以替换为
    案例

    case "$1" in
        -l) lower "$2";;
        -u) upper "$2";;
        -p) proper "$2";;
    esac
    
  • clear
    放在脚本顶部是一种恼人的DOS ism。在Linux上,我不希望运行的脚本清除我的终端,就好像它们最了解一样。要么清除
    清除
    ;或者,如果您想让人喜欢,可以在顶部添加
    tput smcup
    ,在底部添加
    tput rmcup
    ,以保存和恢复终端。这就是像
    less
    vim
    这样的程序绘制整个屏幕,然后在退出时恢复原始终端内容


嘿,John,谢谢,但是,使用if/elif语句有什么问题吗?在函数中使用
echo“$1”
可以解决眼前的问题,但这也意味着函数将查看其第一个参数,并默默地忽略任何后续参数。例如,
较低的FOO栏
将只打印
FOO
。如果这是您想要的,那么这很好,但是
echo“$*”
echo“$@”
更一般。(即使如此,传递
-n
也可能导致异常行为。如果这是一个问题,请使用
printf
而不是
echo