我有这两个脚本
我的第一个脚本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
的值是什么?
答案 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”。