[英]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.