我正在调试 shell 脚本并遇到此错误。我不知道我的脚本发生了什么。
#!/system/bin/sh
function SetEQ(){
prefFile='/mnt/media_rw/6633-3539/tmpFiles/com.smp.musicspeed_preferences.xml'
# a comment line that was deleted by me, sorry for that.
case $1 in
speaker) array=(0.0 0.0 0.0 -3.64 -10.66 -15.0 -6.49 0.0) ;;
samsung) array=(0.0 2.9 0.0 -1.5 -6.4 2.7 0.0 0.0) ;;
*) exit ;;
esac
for i in ${!array[@]}; do
sed -ir "s/(\"com.smp.equalizer.$i\" value=\")[^\"]*(\")/\1${array[$i]}\2/" "$prefFile"
done
}
SetEQ samsung
当我通过以下方式运行脚本时:# sh -vx ./test2.sh
调试信息如下:
+ SetEQ samsung
+ prefFile='/mnt/media_rw/6633-3539/tmpFiles/com.smp.musicspeed_preferences.xml'
+ set -A array -- 0.0 2.9 0.0 -1.5 -6.4 2.7 0.0 0.0
+ sed -ir 's/("com.smp.equalizer.0" value=")[^"]*(")/\10.0\2/' '/mnt/media_rw/6633-3539/tmpFiles/com.smp.musicspeed_preferences.xml'
./test2.sh[18]: : not found
+ sed -ir 's/("com.smp.equalizer.1" value=")[^"]*(")/\12.9\2/' '/mnt/media_rw/6633-3539/tmpFiles/com.smp.musicspeed_preferences.xml'
./test2.sh[18]: : not found
+ sed -ir 's/("com.smp.equalizer.2" value=")[^"]*(")/\10.0\2/' '/mnt/media_rw/6633-3539/tmpFiles/com.smp.musicspeed_preferences.xml'
./test2.sh[18]: : not found
+ sed -ir 's/("com.smp.equalizer.3" value=")[^"]*(")/\1-1.5\2/' '/mnt/media_rw/6633-353/tmpFiles/com.smp.musicspeed_preferences.xml'
./test2.sh[18]: : not found
+ sed -ir 's/("com.smp.equalizer.4" value=")[^"]*(")/\1-6.4\2/' '/mnt/media_rw/6633-353/tmpFiles/com.smp.musicspeed_preferences.xml'
./test2.sh[18]: : not found
+ sed -ir 's/("com.smp.equalizer.5" value=")[^"]*(")/\12.7\2/' '/mnt/media_rw/6633-3539/tmpFiles/com.smp.musicspeed_preferences.xml'
./test2.sh[18]: : not found
+ sed -ir 's/("com.smp.equalizer.6" value=")[^"]*(")/\10.0\2/' '/mnt/media_rw/6633-3539/tmpFiles/com.smp.musicspeed_preferences.xml'
./test2.sh[18]: : not found
+ sed -ir 's/("com.smp.equalizer.7" value=")[^"]*(")/\10.0\2/' '/mnt/media_rw/6633-3539/tmpFiles/com.smp.musicspeed_preferences.xml'
./test2.sh[18]: : not found
我不得不说,sed
当我直接在终端中运行这些行时,这些行没有问题。调试信息很模糊,什么没找到?命令?脚本文件?给sed
? 的路径
编辑:@Paul_Pedant 是对的,我忘记将 sed 行复制到 Windows 系统而不是将它们粘贴回 VI。重新手工输入线路后,问题解决!
答案1
这不是可以运行的代码,sh
因为它包含对数组的引用。可能是bash
,也可能是ksh
,但绝对不是sh
。