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

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

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

原文链接:https://www.f2er.com/linux/394653.html

猜你在找的Linux相关文章