Shell脚本是打印参数而不传递给它

时间:2014-01-02 18:02:11

标签: linux bash shell unix parameters

我从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参数作为参数?

3 个答案:

答案 0 :(得分:3)

来自bash(1) man page

  

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)

将垃圾传递为参数。这样位置参数就会替换它。