我编写了一个简单的脚本,它接受任意数量的参数来演示< code>$@和< code>$*之间的区别:
#!/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 $* $@
因为它们是相同的,这是否意味着$@
等于$*
?还是我遗漏了一点?
从…起http://linuxsig.org/files/bash_scripting.html:
$* 存储在命令行上输入的所有参数
所以
$1 $2 ...
“$@”存储在命令行中输入的所有参数,并分别用引号引起来
所以
"$1" "$2" ...
$ set -- "hello world" foo bar
$ printf '<%s> ' "$@"; echo
<hello world> <foo> <bar> # "$@" keeps original separation
$ printf '<%s> ' "$*"; echo
<hello world foo bar> # "$*" combines everything into one string
$ printf '<%s> ' $*; echo
<hello> <world> <foo> <bar> # $* (no quotes) loses delimitation entirely.
$ printf '<%s> ' $@; echo
<hello> <world> <foo> <bar> # unquoted, $@ is identical to unquoted $*.
从技术上讲,$*
不限于空格分隔;它使用 $IFS
的第一个字符。这可为您带来优势:
jars=( *.jar )
IFS=:
export CLASSPATH=${jars[*]}
来自Bash参考手册中的特殊参数
*
展开到位置参数,从一个开始。当扩展出现在双引号内时,它将扩展为一个单词,每个参数的值由IFS特殊变量的第一个字符分隔。也就是说,“$*”相当于“$1c$2c…”,其中c是IFS变量值的第一个字符。如果未设置IFS,则参数用空格分隔。如果IFS为空,则在没有中间分隔符的情况下连接参数。
@
展开到位置参数,从一个开始。当扩展发生在双引号内时,每个参数将扩展为一个单独的单词。也就是说,“$@”相当于“$1”“$2”....如果双引号扩展发生在单词内,则第一个参数的扩展与原始单词的开头部分连接,最后一个参数的扩展与原始单词的最后一部分连接。当没有位置参数时,“$@”和$@将扩展到零(即,它们被删除)。
最好举个例子:
$ 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
而且 区别是什么,什么时候用什么?
问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。
这两者之间有什么区别?什么是和什么是
我正在运行6个java进程,我将-xms和-xmx参数设置为每个进程1 GB,因此总堆分配为6 GB。我有8 GB的物理内存,所以在启动这6个进程之后,“free”命令应该显示6 GB是已用的,剩下2 GB但事实并非如此。相反,“free”显示只使用了1 GB,而7 GB是免费的。我有点困惑,因为我对-xms(A MB)的理解是,一个MBs的内存是由OS分配给JVM,而-xmx(B MBs)意味着
上次,我发现了Java8及以上版本函数式编程的难点,并在Collectors类中发现了一个静态方法。 我们有一个类员工像: 假设我们有一个类的POJO列表,并且我们希望接收一个所有员工姓名的列表。我们有两种方法,比如: 我知道第一种方法在上使用终端操作,而第二种方法在上使用中间操作,但我想知道第一种方法的性能是否比第二种方法差,反之亦然。如果您能解释第一种情况的潜在性能下降,当我们的数据源(emp
我想写一个矩阵逆的单元测试。 在某些地方,我有0.0f,而反向的单元格有-0.0f,它给出了一个错误,这些单元格不相等。 有没有办法忽略这个错误?