Warum wird meine bash-code fail, wenn ich es mit sh?

Habe ich eine Zeile code, der funktioniert gut in meinem terminal:

for i in *.mp4; do echo ffmpeg -i "$i" "${i/.mp4/.mp3}"; done

Dann legte ich den genau gleiche code-Zeile in ein Skript myscript.sh:

#!/bin/sh
for i in *.mp4; do echo ffmpeg -i "$i" "${i/.mp4/.mp3}"; done

Aber jetzt bekomme ich beim ausführen einen Fehler es:

$ sh myscript.sh
myscript.sh: 2: myscript.sh: Bad substitution

Basierend auf anderen Fragen, die ich versucht, die änderung der shebang zu #!/bin/bash, aber ich bekomme den exakt gleichen Fehler. Warum kann ich nicht dieses Skript ausführen?

  • Sind Sie mit #!/bin/sh oder #!/bin/bash aus dem Skript?
  • In der Konsole werden die Befehle wurden ausgeführt, indem bash shell. Wenn Sie mit #!/bin/sh im Skript, es ist sh shell versucht auszuführen, und daher der Fehler.
  • Ich schrieb #!/bin/sh in der ersten Zeile...
  • ${foo/bar/baz} ist nicht POSIX, und daher funktionieren möglicherweise nicht mit Ihrem /bin/sh. Verwenden #!/bin/bash statt. @MichaWiedenmann sollte zeigen, dass so eine Antwort.
  • OK, wenn ich es ausführen mit bash statt sh es funktioniert.
  • Finden Sie heraus, welche sh die Sie verwenden: readlink -f $(which sh)

InformationsquelleAutor WhatIsName | 2013-03-02
Schreibe einen Kommentar