shell - 为什么 echo 函数在这里不打印任何东西?

标签 shell if-statement echo

在这个 shellscript 中,我创建了 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

最佳答案

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

样式改进:

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

  • 底部的 if/elif 链可以用 case block 替换。

    case "$1" in
        -l) lower "$2";;
        -u) upper "$2";;
        -p) proper "$2";;
    esac
    
  • clear 放在脚本的顶部是一种烦人的 DOS 主义。在 Linux 上,我不希望我运行的脚本清空我的终端,就好像它们最了解一样。要么去掉 clear;或者,如果你想花哨的话,在顶部添加 tput smcup 并在底部添加 tput rmcup 以保存和恢复终端。这就是像 lessvim 这样的程序所做的绘制到整个屏幕,然后在它们退出时恢复原始终端内容。

关于shell - 为什么 echo 函数在这里不打印任何东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48269020/

相关文章:

php - 如果 session auth=1 则无法找出回显文本,否则回显文本 2

if-statement - if-else 或提前返回

java - 关于 IF 语句

linux - BASH 后台进程打印消失提示行

c - ncurses带有echo()的getcur()是否可以确保在执行程序中的下一条语句之前在屏幕上看到该字符?

php - 音频波形许可被拒绝bbcrd

linux - 在类 unix 环境中从 shell 获取人类友好的文件大小 [可移植性]

linux - "echo"sh 和 bash 输出不同的答案

mysql - 线程化 shell 脚本

linux - 如何使用 xargs 删除 iptables 规则?