Shell 为什么echo函数不在这里打印任何内容?
在这个shell脚本中,我创建了3个函数。 它需要2个命令行参数。首先是操作类型,其次是字符串对其执行操作。。 在这里,任何函数中的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' } #
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
。这样,如果这些参数有空格或glob,它们将扩展为一个单词,而不是多个单词$2
- 底部的
/if
链可以替换为elif
块案例
case "$1" in -l) lower "$2";; -u) upper "$2";; -p) proper "$2";; esac
- 将
放在脚本顶部是一种恼人的DOS ism。在Linux上,我不希望运行的脚本清除我的终端,就好像它们最了解一样。要么清除clear
清除
;或者,如果您想让人喜欢,可以在顶部添加
,在底部添加tput smcup
,以保存和恢复终端。这就是像tput rmcup
和less
这样的程序绘制整个屏幕,然后在退出时恢复原始终端内容vim
echo“$1”
可以解决眼前的问题,但这也意味着函数将查看其第一个参数,并默默地忽略任何后续参数。例如,较低的FOO栏
将只打印FOO
。如果这是您想要的,那么这很好,但是echo“$*”
或echo“$@”
更一般。(即使如此,传递-n
也可能导致异常行为。如果这是一个问题,请使用printf
而不是echo
)