多个shell参数赋值为bash命令的前缀

时间:2011-10-22 18:21:28

标签: bash command-line environment-variables

bash manual section 3.7.4中,它声明了

  

可以扩充任何简单命令或功能的环境   暂时通过为参数赋值添加前缀,如上所述   在Shell Parameters [section 3.4]

这是一个微不足道的例子

MYVAR=MYVALUE mycommand

我已阅读第3.4节,我仍然无法弄清楚如何指定多个参数分配。请注意,3.7.4中的陈述绝对是复数,暗示它是可能的。

以下似乎不起作用:

MYVAR1=abc MYVAR2=xyz mycommand

我使用的是bash版本4.1,2009年12月23日。

3 个答案:

答案 0 :(得分:1)

它应该工作。这是可以接受的语法。这是一个例子:

$ cat a
#!/bin/sh
echo $MYVAR1
echo $MYVAR2
$ ./a


$ MYVAR1=abc MYVAR2=xyz ./a
abc
xyz
$

更新:如果您在简单命令之前根据需要使用变量,那么您的答案中给出的更新示例将起作用:

mycommand () { echo MYVAR1=[$MYVAR1]; echo MYVAR2=[$MYVAR2]; }
for f in ~/*.txt ; do MYVAR1=abc MYVAR2=xyz mycommand; done 

答案 1 :(得分:0)

我从未见过这种方法。

您可以随时将常规参数传递给脚本。

更新新示例:

这适用于两种情况:

> mycommand () { echo MYVAR1=[$1]; echo MYVAR2=[$2]; }

> mycommand a b
MYVAR1=[a]
MYVAR2=[b]

> for f in ~/file*.txt; do mycommand a b; done
MYVAR1=[a]
MYVAR2=[b]
MYVAR1=[a]
MYVAR2=[b]

答案 2 :(得分:0)

哎呀,我的例子过于简化了。这很好用:

mycommand () { echo MYVAR1=[$MYVAR1]; echo MYVAR2=[$MYVAR2]; }
MYVAR1=abc MYVAR2=xyz mycommand

但这不是:

mycommand () { echo MYVAR1=[$MYVAR1]; echo MYVAR2=[$MYVAR2]; }
MYVAR1=abc MYVAR2=xyz for f in ~/*.txt; do mycommand; done

,关键区别在于这句话:

  

任何简单的命令或功能

根据section 3.2for命令是一个复杂的命令,而不是“一个简单的命令或函数”。