簡體   English   中英

無法從cmd行參數bash獲取數組

[英]Can't get array from cmd line argument bash

由於某些原因,下面的for循環代碼將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

args不是數組; 它只是一個包含嵌入式換行符的字符串。 這意味着,如果您嘗試將其視為數組,它將看起來就像您將其定義為

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

args=(1 2 3 4)

問題解決了!

我只需要在圓括號內放入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

干杯;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM