我有一个关于 Linux 上的 shell 脚本的问题。我正在尝试运行这个:
$ sh << EOF
#!/bin/sh
function test {
echo test
echo test2
}
test
EOF
结果是:
test
test2
但是,如果我想使用参数运行脚本而不将其保存到文件中怎么办?
$ sh $1 test1 test2 << EOF
#!/bin/sh
function test {
echo $2
echo $3
}
test
EOF
我怎样才能做到这一点?
-s
如果您使用其选项启动 shell,则 shell 将从标准输入读取要执行的脚本。这将阻止它相信第一个选项是脚本文件的名称。所以使用
bash -s "$1" test1 test2
.请注意,如果脚本(或从脚本中调用的任何实用程序)正在从标准输入流中读取,它将使用脚本本身。因此,这不适用于需要标准输入流的脚本。另请注意,我使用
bash
而不是sh
. 这是使用非标准function
关键字创建函数所必需的。假设函数(我将把它重命名为
mytest
内置test
命令的名称)应该输出脚本的第二个和第三个命令行参数,当你调用它时,这些参数需要传递给函数。您可以通过将所有参数传递给函数来做到这一点
...或者,您可以只传递您需要的两个(并将函数更改为输出
"$1"
,"$2"
而不是,这将是它的两个第一个参数):您还需要引用所有扩展,例如,
$1
在命令行上以及$2
在$3
脚本本身中。请参阅何时需要双引号?脚本需要使用引用的 here-document 传递给 shell,否则脚本中的扩展将由调用 shell 而不是由
bash
您正在启动的 shell 执行。您通过引用初始 here-document 分隔符的任何部分来引用 here-document。考虑到所有这些因素,您可能需要使用以下内容:
或者,使用
sh
: