当前位置: 首页 > 知识库问答 >
问题:

$@和 "$@"? [重复]有什么区别吗

西门洛城
2023-03-14

< code>$@和< code >“$ @”有什么区别吗?

我知道非特殊字符可能存在差异,但是带有输入参数的@符号呢?

共有2个答案

舒永嘉
2023-03-14

将$@传递给命令会将所有参数传递给命令。如果参数包含空格,则命令将该参数视为两个单独的参数。

将“$@”传递给命令会将所有参数作为带引号的字符串传递给命令。该命令会将包含空格的参数视为包含空格的单个参数。

为了轻松可视化差异,编写一个函数,一次打印一个循环中的所有参数:

#!/bin/bash

loop_print() {
    while [[ $# -gt 0 ]]; do
        echo "argument: '$1'"
        shift
    done
}

echo "#### testing with \$@ ####"
loop_print $@
echo "#### testing with \"\$@\" ####"
loop_print "$@"

调用该脚本

<script> "foo bar"

会产生输出

#### testing with $@ ####
argument: 'foo'
argument: 'bar'
#### testing with "$@" ####
argument: 'foo bar'
卓新知
2023-03-14

是啊!

$ cat a.sh
echo "$@"
echo $@

让我们运行它:

$ ./a.sh 2 "3     4" 5
2 3     4 5                  # output for "$@"
2 3 4 5                      # output for $@  -> spaces are lost!

如您所见,使用$@会使参数在用作参数时“丢失”一些内容。请参见-例如-我刚刚分配了一个变量,但回显$变量显示了其他内容以详细解释此问题。

来自 GNU Bash 手册 --

@

($@)展开到位置参数,从1开始。当展开发生在双引号内时,每个参数展开到一个单独的单词。即, "$@" 相当于“1美元”“2美元”……如果双引号展开发生在一个单词内,则第一个参数的展开与原始单词的开头部分连接,最后一个参数的展开与原始单词的最后一部分连接。当没有位置参数时, "$@" 和$@展开到零(即它们被移除)。

 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: utf8_general_ci和utf8_unicode_ci有什么区别 我对Unicode有了两个选择,这些选择对于mysql数据库来说很有希望。 您能解释一下utf8_general_ci和utf8_unicode_ci有什么区别吗?在设计数据库时,一个选择一个会产生什么影响? 问题答案: 这是一种非常简单的排序规则,在Un

  • 问题内容: 这个问题已经在这里有了答案 : MyISAM与InnoDB [已关闭] (25个答案) 6年前关闭。 我知道以前曾有人问过这个问题,但大多数时候都是针对特定的数据库或表提出这个问题。我无法在此站点上找到描述这两个引擎及其区别的答案,而不必顾及某人的特定数据库。 我希望将来能够在设计表或数据库方面做出更明智的决定,因此我正在寻找有关两个存储引擎之间差异的全面答案。 MyISAM和Inno

  • 问题内容: 我今天换了讲师,他对我说了奇怪的代码。(他说最好用,当我问为什么时,他回答“因为是!”) 所以这是一个例子: 而不是我习惯的: 两者之间有什么区别。为什么他的方式(使用)更好? 通过快速搜索发现了这一点,但我无法真正理解该答案: 问题答案: 在Java中,总是只比较两个引用(对于非原始元素),即,它测试两个操作数是否引用同一对象。 但是,该方法可以被覆盖-因此两个不同的对象仍然可以相等

  • 可能的重复: console.dir 和 console.log 有什么区别? 我最近了解到 的存在。 在浏览了MDN之后,我并没有清楚地理解它和< code>console.log之间的真正区别。它们都显示相同的输出(但是< code >。dir显示一些属性),是这样吗? 调试/开发时应该使用哪个函数? 编辑:我刚刚发现了一个回答我想法的现有问题:console.dir和console.log有

  • 可能的重复: 在JavaScript中Deferred、Promise和Future之间有什么区别? 有人能指出回调和promise之间有什么不同吗?什么时候应该使用promise等? 此外,关于如何创建和使用promise的链接将得到赞赏。

  • 问题内容: 这个问题已经在这里有了答案 : “泪神经联接”和“尿素联接”有什么区别? (27个答案) 7年前关闭。 内部联接和外部联接之间的区别。我正在使用两个表,并希望从两个表中获取数据,因此我们应该使用拥有哪种类型的连接来解决我们的问题 问题答案: 内部联接-使用任一等价查询的内部联接给出两个表的交集,即它们共有的两行。 左外部联接-左外部联接将给出A中的所有行,以及B中的所有常见行。 完全外