Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
寻源if语句在bash中未按预期工作_Bash - Fatal编程技术网

寻源if语句在bash中未按预期工作

寻源if语句在bash中未按预期工作,bash,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

我有这两个脚本

我的第一个脚本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
}
为什么脚本返回
问题是!=1
?我想不出来

更新*
我正在使用
script1.sh
来配置
script2.sh
。有可能只得到
q
的值吗?

script1.sh
如果第一个参数是
--仅源代码,则不会执行任何操作,但是您使用该参数来获取脚本,因此从不设置
q
。删除
--source only
选项,或将
script1.sh
更改为

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

对问题先前版本的回答

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


另外,在
if
语句及其
else
子句中,
{…}
是不必要的。

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

foo () { echo "blah"; }
echo $foo
也许您想测试这个
[“$q”=“1”]

使用以下命令调用
script1.sh

. ./script1.sh

否<代码>--仅源代码
。现在传递
--source only
的方式确保不会调用
main

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

您的意思是从
script2.sh
调用
script1.sh
?@chepner是,更新了该问题以及
$question
假设为
$q
。更新了问题,但仍在输出
问题是!=1
script1.sh
仅运行
main
如果
$1
不是
--仅源代码
,那么
q
script2.sh
中未设置为1。我如何解决此问题,使
问题
函数运行,从而使
q=1
更改
“${1}”!=“--仅限源”
条件或脚本1参数