为什么 if [[ ]] 在 groovy 中编写 shell 脚本时不起作用

why if [[ ]] not working when writing shell script inside groovy

案例 1:当 运行 在 Jenkins 管道中跟随 shell 脚本时:

pipeline
{ 
agent any
  stages
  {

   stage('image')
        
        { 
        
    steps {
            
            script {
            sh (  returnStdout: true,
                 script: ''' #!/bin/bash
                             if [[ 56 > 10 ]]
                             then
                             echo 'The variable is greater than 10.'
                             fi
                         '''
           
            ) }
            }
          } 
        }
}

以上抛出异常:

/var/lib/jenkins/workspace/test-job@tmp/durable-f9ee86ef/script.sh: 2: [[: not found

CASE2:但是下面的管道工作得很好:

pipeline
{ 
agent any
  stages
  {

   stage('image')
        
        { 
        
    steps {
            
            sh  '''#!/bin/bash
                    VAR=56
                    if [[ $VAR -gt 10 ]]
                    then
                     echo "The variable is greater than 10."
                    fi
              '''
          } 
        }
      }

}

请向我解释为什么相同的 shell 脚本在上述 CASE2 中有效,而在 CASE1 中却失败了?

第一个脚本以

开头
script: ''' #!/bin/bash

注意'''#之间有一个space。仅当脚本的前两个字节为 #! 时,此模式才会被识别并定义要使用的 shell。如果是其他的,包括<space>#!,则无法识别,使用默认的shell。除非默认 shell 是 bash,否则 [[ 无效。在POSIXshell秒内,只有[有效。

第二个脚本正确运行的原因是因为'''#之间没有space。