无法从命令行参数获取数组 bash
Can't get array from cmd line argument bash
由于某些原因,在下面的代码中,for 循环将 args 视为数组,wc -l 可以正确计算行数,但我无法让 $(#args[@]) 产生正确的计数
function doSomthing() {
local i args a
args=;
a=("1" "2" "3" "4");
i=0
echo wc =`wc -l <<< "$args"`;
for arg in $args; do
((i++))
echo "$i"
done;
echo i = $i
echo a = ${#a[@]}
echo args = ${#args[@]}
echo $args
}
这个函数的输出是
$> doSomthing $'1\n2\n3\n4'
wc = 4
1
2
3
4
i = 4
a = 4
args = 1
1 2 3 4
args
不是数组;它只是一个包含嵌入换行符的字符串。这意味着,如果您尝试将其视为一个数组,它看起来就像您将其定义为
args=( $'1\n2\n3' )
没有
args=(1 2 3 4)
问题已解决!
我只需要将 $1 放在括号内即可。
出于某种原因,当我之前尝试它时它不起作用但现在它起作用了。
这是新代码:
function doSomthing () {
local i args a;
args=( );
a=("1" "2" "3" "4");
i=0;
echo wc =`wc -l <<< "$args"`;
for arg in $args; do
((i++));
echo "$i";
done;
echo i = $i;
echo a = ${#a[@]};
echo args = ${#args[@]};
echo ${args[@]}
}
这是新的输出:
$> doSomthing $'1\n2\n3\n4'
wc = 1
1
i = 1
a = 4
args = 4
1 2 3 4
干杯;-)
由于某些原因,在下面的代码中,for 循环将 args 视为数组,wc -l 可以正确计算行数,但我无法让 $(#args[@]) 产生正确的计数
function doSomthing() {
local i args a
args=;
a=("1" "2" "3" "4");
i=0
echo wc =`wc -l <<< "$args"`;
for arg in $args; do
((i++))
echo "$i"
done;
echo i = $i
echo a = ${#a[@]}
echo args = ${#args[@]}
echo $args
}
这个函数的输出是
$> doSomthing $'1\n2\n3\n4'
wc = 4
1
2
3
4
i = 4
a = 4
args = 1
1 2 3 4
args
不是数组;它只是一个包含嵌入换行符的字符串。这意味着,如果您尝试将其视为一个数组,它看起来就像您将其定义为
args=( $'1\n2\n3' )
没有
args=(1 2 3 4)
问题已解决!
我只需要将 $1 放在括号内即可。
出于某种原因,当我之前尝试它时它不起作用但现在它起作用了。
这是新代码:
function doSomthing () {
local i args a;
args=( );
a=("1" "2" "3" "4");
i=0;
echo wc =`wc -l <<< "$args"`;
for arg in $args; do
((i++));
echo "$i";
done;
echo i = $i;
echo a = ${#a[@]};
echo args = ${#args[@]};
echo ${args[@]}
}
这是新的输出:
$> doSomthing $'1\n2\n3\n4'
wc = 1
1
i = 1
a = 4
args = 4
1 2 3 4
干杯;-)