cyc*_*115 2 parameters bash command-line-interface
我已经写了一个简单的脚本,需要在任意数量的参数来证明之间的区别$@和$*:
#!/bin/bash
echo "double quoted $* $@"
echo 'single quoted $* $@'
Run Code Online (Sandbox Code Playgroud)
我在CLI上做了
$./stuff.sh a b c d e f dfs
Run Code Online (Sandbox Code Playgroud)
这就是打印出来的东西
double quoted a b c d e f dfs a b c d e f dfs
single quoted $* $@
Run Code Online (Sandbox Code Playgroud)
既然它们是相同的那么意味着$@等于$*?还是有一点我错过了?
*
从1开始扩展到位置参数.当扩展发生在双引号内时,它会扩展为单个单词,每个参数的值由IFS特殊变量的第一个字符分隔.也就是说,"$*"相当于"$ 1c $ 2c ...",其中c是IFS变量值的第一个字符.如果未设置IFS,则参数由空格分隔.如果IFS为null,则连接参数时不会插入分隔符.
@
从1开始扩展到位置参数.当扩展发生在双引号内时,每个参数都会扩展为单独的单词.也就是说,"$ @"相当于"$ 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3128 次 |
| 最近记录: |