2016-04-05 15 views
2

私は$PATHでこのdependsファイルがあります:私はdepends js kdを実行し、それが返さループの各繰り返しでBashの配列に要素を追加する方法は?

#!/bin/bash 
k=0 
for i in "[email protected]" 
do 
    DP[k]="nodejs-$i" 
    k=$((k+1)) 
done 

echo $DP 

を:

nodejs-js 

私はなるだろう結果はだろうと思って、これは私を驚か:

nodejs-js nodejs-kd 

ループが新しい要素を追加しようとしていたため、DPアラーyの形式nodejs-$iここで$iは私が実行したときにdependsスクリプトに入力した入力です。私はこの代わりにスクリプトを使用して依存する試みた:

#!/bin/bash 
DP=() 
for i in "[email protected]" 
do 
    DP+=("nodejs-$i") 
done 

echo $DP 

それはjs kd入力(すなわち、出力nodejs-jsであった)と、全く同じ結果を返さ。

答えて

3

スクリプトが要素を配列に正しく追加しているため、以下のDP配列の読み方を確認してください。

#!/bin/bash 
k=0 
for i 
do 
    DP[k]="nodejs-$i" 
    k=$((k+1)) 
done 

printf "DP array size is %d\n" "${#DP[@]}" 
printf "%s " "${DP[@]}" 
printf "\n" 

--edited--注新しいアプリケーションがprintfの代わりにエコーを使用することが推奨されています

は、この試してみて。デフォルトでは

おかしい=>ためのステートメントは、スクリプトの引数をループします。

試験:

$ ./depends js kd 
DP array size is 2 
nodejs-js nodejs-kd 
+2

それは ' "$ {DP [@]}"'でなければならない - 引用符で - ない '$ {DP [*]}'、一般的です。前者は内部空白を保持しますが、後者は保持しません。また、 'echo'は非推奨ではありません。明示的に 'bash'を使用している場合、その動作は一貫しています。 '/ bin/sh'の指定されていない種類を使うとき、' echo'は 'printf'には存在しない不一致を持っています - しかし' printf'自体はそのようなシェルには全く存在しないかもしれません。 –

+0

@MarkReed thx!配列記法が修正されました! [echo POSIX標準のアプリケーションの使用法]セクション(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html)によると、 'printf'組み込みコマンドは'エコー。 –

+1

このガイドラインはPOSIX用です。与えられたコードは明示的にPOSIXに準拠していない '#!/ bin/bash'に対して明示的です - ' echo'は '-n'を含むオプションをとります。 –

1

Bashはをあたかも${DP[0]}のように扱います。必要なのは、

関連する問題