xxx.sh: : 찾을 수 없음

xxx.sh: : 찾을 수 없음

쉘 스크립트를 디버깅하는 중에 이 오류가 발생했습니다. 내 스크립트에 무슨 일이 일어나고 있는지 모르겠습니다.

#!/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 라인을 VI에 다시 붙여넣는 대신 Windows 시스템에 복사하는 것을 잊었습니다. 수동으로 줄을 다시 입력한 후 문제가 해결되었습니다!

답변1

sh이는 배열에 대한 참조를 포함하므로 실행 가능한 코드가 아닙니다 . 어쩌면 bash그럴지도 모르지만 ksh, 확실히 그렇지는 않습니다 sh.

관련 정보