【问题标题】:Kornshell If statement not workingKornshell If 语句不起作用
【发布时间】:2013-10-01 16:34:10
【问题描述】:

所以我是 kornshell 的新手,我的 if 语句无法正常工作。这是我文件中的内容

if $1 = "Y"
then
    echo "I am here";
fi

当我执行文件时,这是我得到的错误:

test.ksh[1]: Y: not found [No such file or directory]

我做错了什么?

【问题讨论】:

    标签: bash if-statement ksh string-comparison


    【解决方案1】:

    if后面必须跟一个命令;它测试命令是否成功终止。

    您可以使用命令test 或等效命令[,或ksh 内置[[

    if test "$1" = Y
    

    if [ "$1" = Y ]
    

    if [[ $1 == Y ]]
    

    如果其参数指示的条件为真,则上述命令成功。 man test 应该为您提供有效条件列表。请记住为test[ 命令引用您的变量替换;如果没有,未定义的变量将被替换为空(即它们将被删除),这通常是一个错误报告。

    如果您不需要严格的 Posix 兼容性,请使用内置的 ksh [[bash 中也提供了该功能。它更方便,因为它不会对参数进行分词,因此不需要引用变量扩展。请注意,对于[[,比较== 的右侧是一个模式(“glob”),除非它被引用,因此如果您需要文字相等性检查,您可能需要在右侧使用引号.

    【讨论】:

    • ksh 有一个名为[[ 的内置测试命令——如果你使用它,你必须将]] 作为最后一个参数传递。双括号内的=== 实际上是模式匹配运算符,因此您可以测试一个单词是否以“Y”开头:if [[ $1 == Y* ]]; then。在双括号内不严格要求在变量周围加上引号,因为“不会对 [[ 和 ]] 之间的单词执行字段拆分和文件名生成”——参考 ksh(1) 手册页
    • @glennjackman:好点,我试图过于笼统。我会编辑。
    • @glennjackman 这个问题应该有一个常见问题解答。我知道我经常回答关于它的变体。
    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2017-10-22
    • 2018-05-11
    • 2015-05-05
    相关资源
    最近更新 更多