2017-04-09 13 views
0

文字列が同じ場合を除いて、特定のコマンド内で可能なすべての文字列の組み合わせを取得しようとしています。私は私が何をしようとしている簡略化され、私はそれを実行しようとしました方法を次のように:bash:forループ内のif文が機能しない

for i in a b c 
do 
for p in a b c 
do 
if [ $i -ne $p ] 
then 
echo "$i and $p" 
fi 
done 
done 

私は期待して出力されている:

a b 
a c 
b a 
b c 
c a 
c b 

しかし、動作するようには思えない...任意のアイデア私のネストされたforループで何が問題になっていますか?

+0

これは役立つかもしれません: 'help test' – Cyrus

答えて

3

は交換してください:

if [ $i -ne $p ] 

で:

if [ "$i" != "$p" ] 

-ne演算子は整数が必要です。 !=演算子は文字列に作用します。

単語の分割に続いてシェルに見られるように、実際には複数の単語を含むことができない限り、通常はテストで引用符を二重にする必要があります。

Bashを使用している場合は、Bash固有の[[ ]]テスト構造を使用できます。代わりに、コマンドであることの、それは特別なシェルの構文で、単語の分割にさらされないよう

if [[ $i != "$p" ]] 

二重引用符は、一般的に、このタイプのテストで必要とされていません。ただし、これまで使用されていた文字列がパターンマッチングを引き起こす可能性が全くない限り、比較の右側部分を引用符で囲んでパターンマッチングを無効にする必要があります。

関連する問題