我从script1.sh调用script2.sh而不传递参数。但我将参数传递给script1.sh。我正在尝试打印script2.sh的第一个参数。
script1.sh
#! /bin/bash
PRM1=$1
source script2.sh
script2.sh
#! /bin/bash
PRM1=$1
echo "$PRM1"
输出
# source script1.sh hello
#hello
#
但理想
# source script1.sh hello
#
任何人都可以告诉我为什么script2.sh将script1.sh参数作为参数?
答案 0 :(得分:3)
SHELL BUILTIN COMMANDS
source filename [arguments]
在当前shell环境中从 filename 读取并执行命令,并返回从 filename 执行的最后一个命令的退出状态。如果 filename 不包含斜杠,则
PATH
中的文件名用于查找包含 filename 的目录。在PATH
中搜索的文件无需执行。当bash
未处于posix模式时,如果PATH
中未找到任何文件,则搜索当前目录。如果关闭sourcepath
内置命令的shopt
选项,则不会搜索PATH
。 如果提供了任何参数,则在执行 filename 时它们将成为位置参数。否则位置参数不变。返回状态是脚本中退出的最后一个命令的状态(如果没有执行命令则为0),如果未找到 filename ,则为false请阅读。
答案 1 :(得分:1)
你没有给你的script1.sh任何参数,因为它期待一个。 (小注意,我总是关闭此行中的空白区域:#!/bin/bash
- 而不是#! /bin/bash
)。在你的script1.sh中,试试这个:
#!/bin/bash
PRM1=$1
./script2.sh $PRM1
答案 2 :(得分:1)
将垃圾传递为参数。这样位置参数就会替换它。