采购if语句在bash中没有按预期工作

时间:2013-11-27 17:34:16

标签: bash

我有这两个脚本

我的第一个脚本script1.sh

#!/bin/bash
question()
{
    q=1
}
main()
{
    question
}
if [ "${1}" != "--source-only" ]; then
    main "${@}"
fi

第二个,script2.sh

#!/bin/bash

. ./script1.sh --source-only
func()
{
    if [ "$q" = "1" ]; then
        echo "Questions = 1"
    else 
        echo "Question is != 1"
    fi
}

为什么脚本会返回Question is != 1?我无法弄清楚这一点。

更新* 我正在使用script1.sh来配置script2.sh。是否可以获得q的值是什么?

3 个答案:

答案 0 :(得分:2)

如果第一个参数是script1.sh,则

--source-only不执行任何操作,但您使用该参数获取脚本,因此永远不会设置q。删除--source-only选项,或将script1.sh更改为

if [ "${1}" = "--source-only" ]; then
    main "${@}"
fi

回答以前版本的问题。

question是一个函数,而不是一个变量。假设您正在调用script2.sh来源script1.sh,您希望在q语句中测试question而不是if的值。

另外,{...}语句及其if子句中不需要else

答案 1 :(得分:0)

您从未定义过名为question的变量,因此$question为空字符串。您定义了一个名为question的函数,但请尝试以下方法:

foo () { echo "blah"; }
echo $foo

也许你想测试一下[ "$q" = "1" ]

使用以下方式致电script1.sh

. ./script1.sh

--source-only。您现在通过--source-only传递的方式可确保不会调用main

答案 2 :(得分:0)

您指定--source-only作为第一个参数,不会调用script1.sh中的任何方法,并且q仍为空字符串。此外,您正在检查$question(不是$q)并且根本不参与脚本,因此,它也是一个空字符串,而不是“1”。