我有一个可以“配置”的bash脚本,因为它源自位于第一个参数的文件。现在我想将所有其他参数作为参数传递给源脚本。当我传递参数时,一切都如我所料。但是当我不传递参数时,我的外部脚本中的参数就会被取而代之。
假设我有以下两个脚本:
outer.sh
#!/bin/bash
echo ${@}
MYARGS=${@:2}
echo $MYARGS
. inner.sh $MYARGS
inner.sh
echo "inner arguments: $@"
echo "first: $1"
命令行上的结果:
$ ./outer.sh one two #this is what I expected
one two
two
inner arguments: two
first: two
$ ./outer.sh one #this is what puzzles me
one
inner arguments: one
first: one
第一次调用我的脚本的结果正是我所期望的,因为我提供了参数two
。但是第二次调用显示了我想要实现的内容:我没有传递给脚本的任何参数。
有没有解决方案,我不需要在外部脚本中更改变量的值?
答案 0 :(得分:2)
保存当前要恢复的参数集,然后在采购inner.sh
之前修改该集。
#!/bin/bash
current_args=( "$@" )
set -- "${@:2}" # Configure arguments for inner.sh
. inner.sh
set -- "${current_args[@]}" # Restore arguments for outer.sh
答案 1 :(得分:1)
没有。当您获取脚本时,脚本中的行将被读取并在当前解释器中执行 。这意味着它会影响并受当前执行环境的影响,包括但不限于变量,函数,选项和陷阱。