$@ 跟$* 那个可以作为数组
时间: 2023-08-05 21:07:10 浏览: 194
在shell脚本中,"$@" 和 "$*" 都可以被视为数组。
- "$@" 代表脚本的所有参数,每个参数都是一个独立的元素。可以通过使用索引来访问特定的参数,例如 "$@[0]" 表示第一个参数。可以像数组一样使用循环遍历所有参数。
- "$*" 代表将所有参数作为一个单独的字符串,参数之间用IFS(内部字段分隔符)中定义的分隔符隔开。默认的IFS是空格。可以使用引号将 "$*" 转换为数组,并使用循环遍历每个元素。
例如,假设脚本名称为 `script.sh`,并且在命令行中执行了以下命令:`./script.sh arg1 arg2 arg3`。你可以这样在脚本中使用这两个特殊变量:
```bash
#!/bin/bash
# 使用 "$@"
echo "使用 \$@:"
for arg in "$@"; do
echo $arg
done
# 使用 "$*"
echo "使用 \$*:"
for arg in "$*"; do
echo $arg
done
```
输出会是:
```
使用 $@:
arg1
arg2
arg3
使用 $*:
arg1 arg2 arg3
```
所以,无论是使用 "$@" 还是使用 "$*" 都可以在脚本中将所有参数看作数组来处理。
相关问题
shell 里$@ 是什么意思?
$@ 是 shell 中的特殊参数,表示所有传递给脚本或函数的参数列表。它会将所有的参数列表作为一个字符串数组来处理,每个参数都会被视为一个独立的元素。可以通过 $@ 来访问这个数组,例如:
```
#!/bin/bash
function printArgs() {
echo "Arguments: $@"
}
printArgs one two three
```
运行上述脚本,会输出:
```
Arguments: one two three
```
可以看到,$@ 包含了所有传递给函数的参数。
${IP[*]}与${#IP[*]}的区别
${IP[*]}和${#IP[*]}都是Shell中的变量,但是它们有不同的含义。
${IP[*]}表示将数组IP中的所有元素视为一个整体,使用空格分隔每个元素,并将其作为字符串输出。
${#IP[*]}表示数组IP的元素个数。
例如,如果IP数组包含三个元素:IP=(192.168.1.1 192.168.1.2 192.168.1.3),那么${IP[*]}将输出字符串"192.168.1.1 192.168.1.2 192.168.1.3",而${#IP[*]}将输出数字3。