我在一台 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
请帮帮我
最佳答案
问题是 sh
通常软链接(soft link)到特定的 shell。即使上下文发生变化,它也会发生变化。在 Ubuntu 中,当您启动交互式 shell 时,sh 是 bash
,如果您启动脚本,则为 dash
。当我从 10.04 切换到 12.04 时,我所有的 sh shebanged 脚本都失败了!正如 user2864740 在评论中指出的那样,您可能遇到版本问题。
一个解决方案是在 shebang 中使用特定的 shell,如 /bin/bash
显式。另一个是让你的脚本适用于你可能遇到的所有 shell 版本/风格 ^^
关于linux - shebangs 脚本在机器对机器中表现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22218817/