我有一个接受用户输入的脚本,REFRESH 选项是可选的。我需要测试 $REFRESH 是否存在并且等于字符串“REFRESH”,如果它运行特定的代码块。
用户将执行
./export_data.sh <user> <type> [REFRESH]
如果我在 PHP 中执行此操作,我只需使用 isset() 函数,ksh 中是否存在等效项?
我尝试了以下方法,但这失败了,因为在第二次测试中 $REFRESH 未设置:
if [ -n $REFRESH ] && [ $REFRESH == "REFRESH" ]
then
echo "variable is set and the expected value";
# do stuff
fi
我能想到的唯一另一种方法是嵌套 if 但这似乎很乱:
if [ -n $REFRESH ]
then
if [ $REFRESH == "REFRESH" ]
then
echo "variable is set and the expected value";
# do stuff
fi
有一个更好的方法吗?
最佳答案
if [ "${REFRESH:-unset}" = "REFRESH" ]
then ...
这替代了
unset
如果 $REFRESH
中没有值或者如果值是空字符串。无论哪种方式,它都与“REFRESH”不同,因此它按要求行事。测试变量时,用双引号括起来;它可以节省焦虑。实际上,这意味着您可以简单地编写:
if [ "$REFRESH" = "REFRESH" ]
then ...
关于shell - 检查一个变量是否在 ksh 中设置和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792759/