我在一台linux机器上执行了下面的代码,执行正常,但是当我在另一台linux机器上执行时,它给出了错误,如
Error:( declaration is not correct -- at line array=($@)
declare is not correct -- at line declare hash
code:
#! /bin/sh
STR="SSIDRADIO0=RUSSIA&SSIDRADIO1=JAPAN&COUNTRY=TH&RADIOB=1&RADIOA=0&TXPOWERRADIO0=8&TXPOWERRADIO1=12&RADIOBCHAN=3&RADIOACHAN=60&PUBLISHSSIDRADIO0=1&PUBLISHSSIDRADIO1=1&SUPPORTEDTXRATERADIO0=12&SUPPORTEDTXRATERADIO1=18&REFRESHRATE=2000&INACTPERIOD=600"
IFS='&'
set -- $STR
array=($@)
declare hash
for i in "${array[@]}"; do IFS="=" ; set -- $i; hash[$1]=$2; echo ${hash[$1]} >>help;done
请帮帮我
答案 0 :(得分:3)
问题是sh
通常是软链接到特定的shell。即使上下文发生变化,它也可以改变。在Ubuntu中,当您启动交互式shell时,sh为bash
,如果启动脚本,则为dash
。当我从10.04切换到12.04时,我所有的sh shebanged脚本都失败了!您可能遇到版本问题,因为评论中指出了user2864740。
一种解决方案是明确地使用shebang中的特定shell,如/bin/bash
。另一种方法是使您的脚本适用于您可能遇到的所有shell版本/风格^^
答案 1 :(得分:2)
您的脚本使用各种bash
特定功能,尝试使用/bin/sh
运行该功能会遇到麻烦,因为/bin/sh
可能不会为/bin/bash
设置别名。将shebang线更改为#!/bin/bash
,我打赌你很好。