首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash:用双引号参数调用脚本

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

Stack Overflow用户
提问于 2010-01-03 13:18:11
回答 1查看 6.9K关注 0票数 0

我有一个bash脚本,其中一个用双引号括起来的参数,它在给定的赏金中创建一个映射的形状文件。

代码语言:javascript
复制
$ export_map "0 0 100 100"

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

代码语言:javascript
复制
select ENCODING in UTF8 WIN1252 WIN1255 ISO-8859-8;
...
select NAV_SELECT in Included Excluded;

当然,这两个语句需要输入一个数字作为输入。这可以绕过这些数字(后面跟着换行符)到脚本。

为了节省时间,我想要一个脚本来创建8张地图--每个ENCODING (4个选项)和NAV_SELECT (2个选项)的组合。

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

代码语言:javascript
复制
#!/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脚本中,并将它与双引号传递给内部脚本。

CLARIFICATIONS:

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

有什么想法吗?

谢谢,

亚当

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-03 14:38:52

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

代码语言:javascript
复制
printf "$nav\n$enc\n" | /bin/bash -c "./export_map.sh \"100 200 300 400\""

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

代码语言:javascript
复制
printf "$nav\n$enc\n" | ./export_map.sh "100 200 300 400"

编辑,谢谢你的澄清。为了将参数从包装器脚本传递到内部脚本,并将其保持为单个参数,您可以传入"$1",其中的引号表明您希望将这个参数分组为一个参数,而$1是包装器脚本的第一个参数。如果希望将所有参数从外部脚本传递到内部脚本,每个参数都保留为单个参数,则可以使用"$@"

代码语言:javascript
复制
#!/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

代码语言:javascript
复制
#!/bin/bash

for str in "$@"
do
    echo $str
done

outer.bash

代码语言:javascript
复制
#!/bin/bash

./inner.bash "$@"

并援引它:

代码语言:javascript
复制
$ ./outer.bash "foo bar" baz "quux zot"
foo bar
baz
quux zot
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1994928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档