bash:使用双引号参数调用脚本

时间:2010-01-03 13:18:11

标签: bash quotes

我有一个bash脚本,一个用双引号括起来的参数,它在给定的边界内创建一个map的shape文件,例如。

$ export_map "0 0 100 100"

在脚本中,有两个select语句:

select ENCODING in UTF8 WIN1252 WIN1255 ISO-8859-8;
...
select NAV_SELECT in Included Excluded;

当然,这两个语句要求输入输入一个数字作为输入。这可以通过将数字,然后换行符连接到脚本来绕过。

为了节省时间,我希望有一个脚本可以为ENCODING(4个选项)和NAV_SELECT(2个选项)的每个组合创建8个地图。

我已经将另一个bash脚本create_map作为包装器写入服务器:

#!/bin/bash

for nav in 1 2 3 4;
do
    for enc in 1 2;
    do
        printf "$nav\n$enc\n" | /bin/bash -c "./export_map.sh \"0 0 100 100\"" 
    done
done

**这有效(谢谢,Brian!),但我无法找到从外部脚本外部传递数字参数"0 0 100 100"的方法。 **

基本上,我正在寻找在双引号内接受包装器bash脚本的参数的方法,并将它 - 用双引号 - 传递给内部脚本。

澄清:

export_map是主要脚本,从create_map 8次调用。

有什么想法吗?

谢谢,

亚当

1 个答案:

答案 0 :(得分:6)

如果我正确理解您的问题(我不确定;请参阅我的评论),您应该向\n添加另一个printf;默认情况下,printf不会以echo的方式添加尾随换行符。这将确保select命令正确读取第二个值,我假设它出现在export_map.sh中。

printf "$nav\n$enc\n" | /bin/bash -c "./export_map.sh \"100 200 300 400\""

另外,我认为您不需要添加/bin/bash -c和引号。除非我遗漏了一些内容,否则以下内容应该足够了:

printf "$nav\n$enc\n" | ./export_map.sh "100 200 300 400"

修改感谢您的澄清。为了将包装器脚本中的参数传递到内部脚本中,将其保存为单个参数,您可以传入"$1",其中引号表示您希望将其分组为一个参数,并且{ {1}}是包装器脚本的第一个参数。如果要将外部脚本中的所有参数传递到内部脚本,每个参数都保留为单个参数,则可以使用$1代替。

"$@"

以下是#!/bin/bash for nav in 1 2 3 4; do for enc in 1 2; do printf "$nav\n$enc\n" | ./export_map.sh "$1" done done 如何运作的快速示例。首先,"$@"

inner.bash

#!/bin/bash for str in "$@" do echo $str done

outer.bash

并调用它:

#!/bin/bash

./inner.bash "$@"