在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日。
答案 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.2,for
命令是一个复杂的命令,而不是“一个简单的命令或函数”。