第一个文件(trigger.sh):
#!/usr/bin/env bash
echo "Configuring tests"
echo "Source 1"
source ./run-1.sh -m "George"
echo "Source 2"
source ./run-1.sh -m "Fred"
echo "End"
第二个文件(run-1.sh):
#!/usr/bin/env bash
echo "IN run-1"
while getopts m: flag; do
case "${flag}" in
m) MODE=${OPTARG} ;;
esac
done
echo "before mode"
echo "$MODE"
echo "after mode"
输出:
./trigger.sh
Configuring tests
Source 1
IN run-1
before mode
George
after mode
Source 2
IN run-1
before mode
George
after mode
End
如果您查看执行trigger.sh 时的输出,您将看到第二个源调用不会将参数更新为“Fred”,而是将其保留为“George”。 这是什么原因呢?有使用
source
的解决方法吗?
添加命令:
unset OPTIND
在
while getopts
循环之前。