Bash shell脚本中出现语法错误,表示意外标记`(
我已经编写了以下shell脚本Bash shell脚本中出现语法错误,表示意外标记`(,bash,shell,Bash,Shell,我已经编写了以下shell脚本 while :; do status=$($EMR_BIN/elastic-mapreduce --jobflow $JOBFLOW --list | grep "CopyLogs" | awk '{print $1}') [[ $status == +( *RUNNING*|*PENDING*|*WAITING* ) ]] || break sleep 60 done 它在第3行给了我一个错误,说条件表达式中的语法错误:意外的标记(“”)。我尝试在大括号之间给
while :; do
status=$($EMR_BIN/elastic-mapreduce --jobflow $JOBFLOW --list | grep "CopyLogs" | awk '{print $1}')
[[ $status == +( *RUNNING*|*PENDING*|*WAITING* ) ]] || break
sleep 60
done
它在第3行给了我一个错误,说条件表达式中的语法错误:意外的标记(“”)。我尝试在大括号之间给空格,但它不起作用
有人能帮我吗。看起来您正在尝试使用扩展全局搜索。请确保您的脚本前面的某个地方有shopt-s extglob
,或者重写以使用标准全局搜索
#!/bin/sh
while :; do
case $($EMR_BIN/elastic-mapreduce --jobflow $JOBFLOW --list | awk '/CopyLogs/{print $1}') in
*RUNNING*|*PENDING*|*WAITING* ) sleep 60;;
*) break;;
esac
done
由于没有剩余的bashism,这个脚本现在与POSIXsh
兼容(我个人也认为这样更可读)
(请注意对无用的grep | awk
的修复)哦,好的,你的意思是说使用shopt-x extglob
,对吗?你必须使用“=~”操作符,而不是“==”。