寻源if语句在bash中未按预期工作
我有这两个脚本 我的第一个脚本script1.sh寻源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
#!/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参数