shell $@ 变量赋值和迭代
shell $@ variable assignment and iteration
function f() {
for arg; do
echo "$arg"
done
}
f 'hello world' 'second arg' '3rdarg'
这很好用:
hello world
second arg
3rdarg
但是我什么时候把$@
赋值给某个变量,然后就出错了:
function f() {
local args="$@"
for arg in "$args"; do
echo "$arg"
done
}
输出:
hello world second arg 3rdarg
当我取消引用 $args
时,每个参数都被拆分成一个单词:
hello
world
second
arg
3rdarg
最后,我想知道有没有办法像$@这样定义变量。如有任何回复,我们将不胜感激。
您需要使用数组:
function f() {
local args=("$@") # values in parentheses
for arg in "${args[@]}"; do # array expansion syntax
echo "$arg"
done
}
function f() {
for arg; do
echo "$arg"
done
}
f 'hello world' 'second arg' '3rdarg'
这很好用:
hello world
second arg
3rdarg
但是我什么时候把$@
赋值给某个变量,然后就出错了:
function f() {
local args="$@"
for arg in "$args"; do
echo "$arg"
done
}
输出:
hello world second arg 3rdarg
当我取消引用 $args
时,每个参数都被拆分成一个单词:
hello
world
second
arg
3rdarg
最后,我想知道有没有办法像$@这样定义变量。如有任何回复,我们将不胜感激。
您需要使用数组:
function f() {
local args=("$@") # values in parentheses
for arg in "${args[@]}"; do # array expansion syntax
echo "$arg"
done
}