linux $和 的区别,linux – $*和$@有什么区别

除了技术文档中描述的差异之外,最好使用一些示例显示:

假设我们有四个shell脚本test1.sh:

#!/bin/bash

rm $*

test2.sh:

#!/bin/bash

rm "$*"

test3.sh:

#!/bin/bash

rm $@

test4.sh:

#!/bin/bash

rm "$@"

(我在这里使用rm而不是echo,因为有了echo,你看不出差别)

我们使用以下命令行调用所有这些命令行,否则在一个空的目录中:

./testX.sh "Hello World" Foo Bar

对于test1.sh和test3.sh,我们收到以下输出:

rm: cannot remove ‘Hello’: No such file or directory

rm: cannot remove ‘World’: No such file or directory

rm: cannot remove ‘Foo’: No such file or directory

rm: cannot remove ‘Bar’: No such file or directory

这意味着,参数被视为一个完整的字符串,与空格连接,然后作为参数重新分配并传递给命令.将参数转发给另一个命令时,这通常没有用.

使用test2.sh,我们得到:

rm: cannot remove ‘Hello World Foo Bar’: No such file or directory

所以我们和test {1,3} .sh一样,但这次,结果作为一个参数传递.

test4.sh有一些新东西:

rm: cannot remove ‘Hello World’: No such file or directory

rm: cannot remove ‘Foo’: No such file or directory

rm: cannot remove ‘Bar’: No such file or directory

这意味着参数的传递方式与它们传递给脚本的方式相同.将参数传递给其他命令时,这很有用.

区别是微妙的,但是在将参数传递给命令时会咬你,这些命令期望命令行中的某些点以及空间参与游戏时的信息.这实际上是大多数炮弹的许多陷阱之一的一个很好的例子.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值