for循环字符数组给出意外的“(”

我是bash脚本的血腥初学者,如果以下内容非常简单,我很抱歉。 我得到的错误是:

4: Syntax error: "(" unexpected

我基本上尝试在Ubuntu 10.04.4 LTS服务器上运行以下bash:

 #!/bin/bash ### Positions declare -a POS=("01" "02" "03" "04" "05" "06" "16" "17" "18") ### Timeslices declare -a ZSPOS_01=("1" "3" "4" "5") declare -a ZSPOS_02=("1" "2" "3" "4" "5" "6" "8" "9" "10" "11" "12" "31" "41" "51" "101") declare -a ZSPOS_03=("1" "2" "3" "4" "5" "6" "7" "8" "9" "31" "41" "91") declare -a ZSPOS_04=("1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "41" "51" "101") declare -a ZSPOS_05=("2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "51" "61" "101") declare -a ZSPOS_06=("1" "2" "3" "4" "5" "6" "7" "8" "31" "51" "71") declare -a ZSPOS_16=("1" "2" "3" "4" "11" "41") declare -a ZSPOS_17=("1" "2" "3" "4" "11" "41") declare -a ZSPOS_18=("1" "2" "3" "4") for SCANPOSITION in ${POS[@]} do for ZEITSCHNITT in ${ZSPOS_$SCANPOSITION[@]} do echo "Timeslice" $ZEITSCHNITT "in Position" $SCANPOSITION "!" done done 

  1. ( unexpected错误表示您正在调用脚本,如sh scriptname而不是bash scriptname或者最好是chmod 755 scriptname; ./scriptname

  2. 动态数组名称很难在bash中使用。 您需要临时变量才能与间接扩展一起使用。

     for SCANPOSITION in "${POS[@]}" do tmp="ZSPOS_${SCANPOSITION}[@]" for ZEITSCHNITT in "${!tmp}" # note the "!" do echo "Timeslice $ZEITSCHNITT in Position $SCANPOSITION !" done done 
  3. 你应该总是引用你的"$variables"除非你确切地知道为什么要关闭引号。

  4. 另外,不要习惯使用ALL_CAPS_VARS – 有一天你会不小心使用PATH ,然后想知道为什么你的脚本坏了