我在尝试让 if 语句在函数内部工作时遇到困难。我正在使用一个非常简单的示例,如下所示,在脚本执行后回显 $1 变量:
脚本内部的逻辑
STATUS() {
if [[ $1 == "-s" ]];then
echo "--------------------------------------------------------"
echo "Test success at: `date`:"
echo "--------------------------------------------------------"
else
echo "--------------------------------------------------------"
echo "Test fail at: `date`:"
echo "--------------------------------------------------------"
fi
}
STATUS
执行示例:
ksh chris_test.sh -s
预期输出:
--------------------------------------------------------
Test success at: Sun Jan 7 06:59:34 GMT 2024:
--------------------------------------------------------
我得到了什么:
--------------------------------------------------------
Test fail at: Sun Jan 7 06:59:34 GMT 2024:
--------------------------------------------------------
我试图转义双引号和美元符号,包括方括号,甚至尝试使方括号成为单引号也没有什么区别。仍见失败。我哪里错了?
在
STATUS()
内部,$1
不是指脚本的第一个参数,而是指函数的第一个参数。当您调用该函数时,您需要转发脚本的参数,以便它可以读取它们。 "$@"
就是这样做的。无论有多少参数,它都会扩展为 "$1" "$2" "$3" ...
,并且正确引用它们,以便保留空格和其他特殊字符。
STATUS "$@"