bash 命令前缀的多个 shell 参数分配

发布于 2024-12-11 09:07:09 字数 562 浏览 0 评论 0原文

bash 手册第 3.7.4 节中,它指出

可以增强任何简单命令或功能的环境 暂时通过在其前面加上参数分配作为前缀,如所述 在 Shell 参数 [第 3.4 节] 中。

一个简单的例子是

MYVAR=MYVALUE mycommand

我已经阅读了第 3.4 节,但我仍然不知道如何指定多个参数分配。注意,3.7.4中的陈述肯定是复数,暗示这是可能的。

以下似乎不起作用:

MYVAR1=abc MYVAR2=xyz mycommand

我正在使用 bash 版本 4.1,2009 年 12 月 23 日。

In the bash manual section 3.7.4, it states

The environment for any simple command or function may be augmented
temporarily by prefixing it with parameter assignments, as described
in Shell Parameters [section 3.4].

And a trivial example of this is

MYVAR=MYVALUE mycommand

I have read section 3.4 and I still can't figure out how to specify multiple parameter assignments. Note that the statement in 3.7.4 is definitely plural, implying that it is possible.

The following does not seem to work:

MYVAR1=abc MYVAR2=xyz mycommand

I am using bash version 4.1, 23 December 2009.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

秋风の叶未落 2024-12-18 09:07:09

它应该有效。这是可接受的语法。这是一个示例:

$ 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 

It should work. That is acceptable syntax. Here's an example:

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


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

UPDATE: Your updated example given in your answer will work if you precede the simple command with the variables as required:

mycommand () { echo MYVAR1=[$MYVAR1]; echo MYVAR2=[$MYVAR2]; }
for f in ~/*.txt ; do MYVAR1=abc MYVAR2=xyz mycommand; done 
感性 2024-12-18 09:07:09

哎呀,我的例子过于简单了。这工作正常:

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

关键的区别是这句话:

对于任何简单的命令或函数

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

Oops, my example was over-simplified. This works fine:

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

but this does not:

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

and the key difference is this phrase:

for any simple command or function

A for command is a complex command, not "a simple command or function", according to section 3.2.

海风掠过北极光 2024-12-18 09:07:09

我从未见过使用这种方法。

您始终可以将常规参数传递给脚本。

更新新示例:

这在两种情况下都有效:

> 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]

I've never seen that method used.

You could always just pass in regular parameters to the script.

Updating for new example:

This works in both situations:

> 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]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文