为什么这个相当简单的“如果”不起作用?

Dis*_*ame 0 bash

这是我的脚本:

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
Run Code Online (Sandbox Code Playgroud)

它应该寻找第二个参数,删除 potential .two,然后将其与 进行比较load,如果是load,则应设置keyaNXlye1tGbd0uP。但是,这不起作用。这是我运行时的样子。

pskey Decrypt load (some string)
Run Code Online (Sandbox Code Playgroud)

这是来自的输出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
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除 whats after [[ "$1" == "Decrypt" ]],它会起作用。那条线有什么问题?

ter*_*don 7

如果我理解正确的话,你正在寻找这样的东西:

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

请注意,您还可以将整个过程简化为:

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