在这个 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
以保存和恢复终端。这就是像less
和vim
这样的程序所做的绘制到整个屏幕,然后在它们退出时恢复原始终端内容。
关于shell - 为什么 echo 函数在这里不打印任何东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48269020/