我们有父bash脚本
parent_source.bash
#!/bin/bash
source child_test.bash
在child_test.bash里面
echo $@
#Doing some validation checks for $@, for child_script command line arguments are optional
执行时的位置
source parent_source.bash one two
子脚本在$ @中使用“one”和“two”,因此验证失败,不考虑给予子脚本的零参数。子脚本假设它有2个命令行参数。
但是,如果我们为孩子提供命令行参数它也正常工作。
有人可以帮助我们吗
由于
答案 0 :(得分:0)
执行source命令时,实际上将child_test.bash
的内容注入parent_source.bash
脚本,然后执行child_test.bash
中的第一行,即:
echo $@
它实际上是指传递给父脚本的参数,因为命令的范围实际上在parent_source.bash
脚本上。
我建议在不将内容注入父脚本的情况下执行脚本。
这样的事情:
<强> parent_source.bash 强>:
#!/bin/bash
./child_test.bash
<强> child_test.bash 强>:
echo $@
#Doing some validation checks for $@, for child_script command line arguments are optional
答案 1 :(得分:0)
您缺少$@
选项,可将parent_source.bash
的值传递给child_test.bash
parent_source.bash
#!/bin/bash
source child_test.bash $@
在child_test.bash里面
echo $@
执行时的位置
source parent_source.bash one two
答案 2 :(得分:0)
由于source
来自父级的子脚本,父脚本的shell环境也会传播到子脚本的内容。
因此,可以使用父脚本的参数,并在子脚本上使用$@
进行扩展。
您可以将参数保存到数组中的父脚本,然后在获取子脚本之前取消设置位置参数,以防止它们对子项可用。因此,您的父脚本可以采用以下形式:
args=( $@ )
set --
source child_test.sh