无法从cmd行参数bash获取数组

时间:2016-12-01 18:37:32

标签: arrays bash shell count ksh

由于某种原因,在下面的代码中循环处理args为数组,而wc -l可以正确计算行数,但我无法获得$(#args [@])来产生正确的计数

function doSomthing() {
local i args a
args=$1;
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

2 个答案:

答案 0 :(得分:4)

args不是数组;它只是一个包含嵌入换行符的字符串。这意味着,如果您尝试将其视为一个数组,它将显示为您将其定义为

args=( $'1\n2\n3\4' )

args=(1 2 3 4)

答案 1 :(得分:0)

问题解决了!

我只需要在括号内加1美元 出于某种原因,当我尝试它之前它没有工作,但现在它确实。


这是新代码:

function doSomthing () {
    local i args a;
    args=( $1 );
    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

干杯; - )