使用sqlplus和Shell脚本进行括号和声明数组的问题

时间:2015-04-03 14:17:13

标签: arrays bash shell syntax-error sh

我收到" 语法错误:"("意外(期待"}")"创建时出错我的脚本中的变量。我希望从sqlplus获取输出并将其作为数组返回。这是我正在使用的函数:

get_list() {
ip=$1
port=$2
db_user=$3
db_pass=$4    

names_array=(`sqlplus -S $db_user/$db_pass@$ip:$port << EOF
    set heading off
    set feedback off;
    select username from users;
EOF`)

element=0
while [ $element -lt  ${names_array[*]} ]
    do
       echo ${element}") "${names_array[$element]}
       let element=$element+1;
    done
printf "\n\n"
read -p "Choice:" selection

sqlplus -S $db_user/$db_pass@$ip:$port << EOF
   drop user ${names_array[$selection]};
   quit;
EOF


}

我在这里声明数组时发生错误。这是bash抱怨的括号:

names_array=(`sqlplus -S $db_user/$db_pass@$ip:$port << EOF

感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:1)

某些shell(sh,dash)不支持数组。使用支持它们的bash。

我可以在破折号中复制错误:

arr=(`cat << EOF
a
b
c
EOF`)
dash: 11: Syntax error: word unexpected (expecting ")")

在bash中,代码可以正常运行:

arr=(`cat << EOF
a
b
c
EOF` )
echo ${arr[1]}

输出:

b