2013-04-09 17 views
10

私は、別のforループのような追加のコードを追加せずにこれをしようとしています。文字列と配列を比較する正の論理を作ることができます。私は負の論理を必要とし、アレイにない値しか印刷しませんが、本質的にこれはシステムアカウントを除外することです。Bashの場合文字列が配列に含まれていない場合はどうなりますか?

私のディレクトリは次のようにその中のファイルを持っています

admin.user.xml 
news-lo.user.xml 
system.user.xml 
campus-lo.user.xml 
welcome-lo.user.xml 

これは私がそのファイルがディレクトリにある場合は正のマッチングを行うために使用されるコードは次のとおりです。

#!/bin/bash 

accounts=(guest admin power_user developer analyst system) 

for file in user/*; do 

    temp=${file%.user.xml} 
    account=${temp#user/} 
    if [[ ${accounts[*]} =~ "$account" ]] 
    then 
     echo "worked $account"; 
    fi 
done 

で任意のヘルプ正しい方向は感謝する、ありがとう。

+1

これはおそらく 'for file in user/*;を意味しています。 ( ';'に注意してください) – devnull

+0

ありがとう、誰かが私の質問の編集をして、誤ってキャリッジリターンを削除しました。 – blamonet

答えて

13

あなたが肯定試合の結果を否定することができます

if ! [[ ${accounts[*]} =~ "$account" ]] 

またはしかし

if [[ ! ${accounts[*]} =~ "$account" ]] 

$accountは「ユーザー」に等しい場合、それは一致しているので、あなたは、マッチを買ってあげることを予告"power_user"の部分文字列です。

match=0 
for acc in "${accounts[@]}"; do 
    if [[ $acc = "$account" ]]; 
     match=1 
     break 
    fi 
done 
if [[ $match = 0 ]]; then 
    echo "No match found" 
fi 
+0

オリジナルの質問を編集しました。 – blamonet

+0

申し訳ありませんが、あなたの質問を慎重に読んだことはありません。私は実際にあなたの質問に今答えるためにこれを編集しました。 – chepner

+0

すばらしいアドバイス、ありがとう。 – blamonet

関連する問題