不为源脚本

时间:2015-11-11 15:35:21

标签: bash

我有一个可以“配置”的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。但是第二次调用显示了我想要实现的内容:我没有传递给脚本的任何参数。

有没有解决方案,我不需要在外部脚本中更改变量的值?

2 个答案:

答案 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)

没有。当您获取脚本时,脚本中的行将被读取并在当前解释器中执行 。这意味着它会影响并受当前执行环境的影响,包括但不限于变量,函数,选项和陷阱。