bash - $@ 和 $* 之间的区别

标签 bash parameters command-line-interface

<分区>

我写了一个简单的脚本,它接受任意数量的参数来演示 $@$* 之间的区别:

#!/bin/bash                                                                
echo "double quoted $*     $@"
echo 'single quoted $*     $@'

我在 CLI 上做的

$./stuff.sh a b c d e f dfs 

这是打印出来的

double quoted a b c d e f dfs     a b c d e f dfs
single quoted $*     $@

既然它们相同,是否意味着 $@ 等于 $*?还是我遗漏了一点?

最佳答案

来自 Special Parameters in Bash Reference Manual

*

Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, it expands to a single word with the value of each parameter separated by the first character of the IFS special variable. That is, "$*" is equivalent to "$1c$2c…", where c is the first character of the value of the IFS variable. If IFS is unset, the parameters are separated by spaces. If IFS is null, the parameters are joined without intervening separators.

@

Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, each parameter expands to a separate word. That is, "$@" is equivalent to "$1" "$2" …. If the double-quoted expansion occurs within a word, the expansion of the first parameter is joined with the beginning part of the original word, and the expansion of the last parameter is joined with the last part of the original word. When there are no positional parameters, "$@" and $@ expand to nothing (i.e., they are removed).

举个例子更好:

$ d=(a b c)
$ for i in "${d[*]}"; do echo $i; done <---- it is a field all together
a b c
$ for i in "${d[@]}"; do echo $i; done <---- each item is a different field
a
b
c

关于bash - $@ 和 $* 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19053064/

相关文章:

bash - 如何在 if 语句中使用变量命令

linux - 无法在 while 循环或 if 语句中创建数组?

javascript - jquery:将参数和初始函数传递给jquery原型(prototype)

python - 以编程方式确定函数所需的参数数量 - Python

angular 4 应用程序在智能电视网络浏览器(网络浏览器)中不起作用

linux - Grep 之前和之后最后 '/'

linux - 如何使用 `repo forall -c <something>`,其中 <something> 是 bash 别名或函数

无法获得计算数字正确阶乘的程序

node.js - 升级到Angular 5后编译错误

mysql bash 命令在 mobaxterm 中失败,但在 cmd windows 中成功