Linux Shell脚本正在打印参数,但未传递给它

Linux Shell脚本正在打印参数,但未传递给它,linux,bash,shell,unix,parameters,Linux,Bash,Shell,Unix,Parameters,我正在从script1.sh调用script2.sh,但没有传递参数。但我正在将参数传递给script1.sh。我正在尝试打印script2.sh的第一个参数 script1.sh #! /bin/bash PRM1=$1 source script2.sh #! /bin/bash PRM1=$1 echo "$PRM1" script2.sh #! /bin/bash PRM1=$1 source script2.sh #! /bin/bash PRM1=$1 echo "$PRM1"

我正在从script1.sh调用script2.sh,但没有传递参数。但我正在将参数传递给script1.sh。我正在尝试打印script2.sh的第一个参数

script1.sh

#! /bin/bash
PRM1=$1
source script2.sh
#! /bin/bash
PRM1=$1
echo "$PRM1"
script2.sh

#! /bin/bash
PRM1=$1
source script2.sh
#! /bin/bash
PRM1=$1
echo "$PRM1"
输出为

# source script1.sh hello
#hello
#
但是理想情况下

# source script1.sh hello

#
有人能告诉我为什么script2.sh将script1.sh参数作为它的参数吗?

来自:

SHELL内置命令 在当前shell环境中读取并执行来自filename的命令,并返回从filename执行的最后一个命令的退出状态。如果文件名不包含斜杠,则使用
PATH
中的文件名查找包含文件名的目录。在
路径中搜索的文件不必是可执行文件。当
bash
未处于posix模式时,如果在
PATH
中未找到任何文件,则搜索当前目录。如果
shopt
内置命令的
sourcepath
选项被关闭,则不会搜索
PATH
如果提供了任何参数,则在执行文件名时,这些参数将成为位置参数。否则,位置参数将保持不变。返回状态是脚本中最后一个退出命令的状态(如果未执行任何命令,则返回0),如果未找到或无法读取文件名,则返回false

从:

SHELL内置命令 在当前shell环境中读取并执行来自filename的命令,并返回从filename执行的最后一个命令的退出状态。如果文件名不包含斜杠,则使用
PATH
中的文件名查找包含文件名的目录。在
路径中搜索的文件不必是可执行文件。当
bash
未处于posix模式时,如果在
PATH
中未找到任何文件,则搜索当前目录。如果
shopt
内置命令的
sourcepath
选项被关闭,则不会搜索
PATH
如果提供了任何参数,则在执行文件名时,这些参数将成为位置参数。否则,位置参数将保持不变。返回状态是脚本中最后一个退出命令的状态(如果未执行任何命令,则返回0),如果未找到或无法读取文件名,则返回false


您没有给script1.sh任何参数,因为它需要一个参数。(一个小提示,我总是在这一行中关闭空白:
#!/bin/bash
-而不是
#!/bin/bash
)。在script1.sh中,尝试以下操作:

#!/bin/bash
PRM1=$1
./script2.sh $PRM1

您没有给script1.sh任何参数,因为它需要一个参数。(一个小提示,我总是在这一行中关闭空白:
#!/bin/bash
-而不是
#!/bin/bash
)。在script1.sh中,尝试以下操作:

#!/bin/bash
PRM1=$1
./script2.sh $PRM1

将垃圾作为参数传递。以便位置参数将替换为它。

将垃圾作为参数传递。因此,位置参数将替换为它。

那么,如何克服这个问题呢。有什么解决办法吗。因为我想传递一次参数,下次我不会传递。如何处理这种情况?一种解决方案是在分配
PRM1=$1
后调用script1.sh中的
shift
。这将放弃脚本中的第一个位置参数。或者调用
set--
放弃所有位置参数。那么,如何克服这个问题呢。有什么解决办法吗。因为我想传递一次参数,下次我不会传递。如何处理这种情况?一种解决方案是在分配
PRM1=$1
后调用script1.sh中的
shift
。这将放弃脚本中的第一个位置参数。或者调用
set--
放弃所有位置参数。