このように単純な「if」が機能しないのはなぜですか?

このように単純な「if」が機能しないのはなぜですか?

これは私のスクリプトです。

if [[ "$(echo "$2" | sed 's/.two//g')" == "load" ]] && [[ "$1" == "Decrypt" ]] || [[ "$(echo "$2" | sed 's/.two//g')" == "load" ]] && [[ "$1" == "Encrypt" ]] 
then
    key=aNXlye1tGbd0uP
else
    if [ -z "$key" ]
    then
        key="$2"
    fi
fi

2番目のパラメータを見つけて電位を取り除き、それと比較し.twoloadそうであればにload設定する必要があります。しかし、これはうまくいきません。実行してみるとこんな感じです。keyaNXlye1tGbd0uP

pskey Decrypt load (some string)

これは次の出力ですbash -x

++ echo load
++ sed s/.two//g
+ [[ load == \l\o\a\d ]]
+ [[ Decrypt == \D\e\c\r\y\p\t ]]
+ [[ Decrypt == \E\n\c\r\y\p\t ]]
+ '[' -z '' ']'
+ key=load

しかし、次のものを取り除くとうまく[[ "$1" == "Decrypt" ]]いきます。その行に問題がありますか?

ベストアンサー1

私が正しく理解した場合は、次のようなものを探しています。

if [[ "$(echo "$2" | sed 's/.two//g')" == "load" && "$1" == "Decrypt" ]] || 
   [[ "$(echo "$2" | sed 's/.two//g')" == "load" && "$1" == "Encrypt" ]]
then
    ...
fi

次のようにすべてを簡素化することもできます。

 if [[ "$(echo "$2" | sed 's/.two//g')" == "load" && "$1" =~ (De|En)crypt ]]; then ...

おすすめ記事