在编写shell程序时,我们经常使用/bin/sh和/bin/bash.我经常使用bash,但我不知道它们之间有什么区别.
bash和之间的主要区别是sh什么?
我们究竟需要意识到在编程时bash和sh?
我有一行代码可以在我的终端中正常工作:
for i in *.mp4; do echo ffmpeg -i "$i" "${i/.mp4/.mp3}"; done
Run Code Online (Sandbox Code Playgroud)
然后我在脚本中放入完全相同的代码行myscript.sh:
#!/bin/sh
for i in *.mp4; do echo ffmpeg -i "$i" "${i/.mp4/.mp3}"; done
Run Code Online (Sandbox Code Playgroud)
但是,现在运行时出现错误:
$ sh myscript.sh
myscript.sh: 2: myscript.sh: Bad substitution
Run Code Online (Sandbox Code Playgroud)
基于其他问题,我尝试将shebang更改为#!/bin/bash,但我得到完全相同的错误.为什么我不能运行这个脚本?
我如何制作一个可以执行的自解压存档sh?
我最接近的是:
extract_archive () {
printf '<archive_contents>' | tar -C "$extract_dir" -xvf -
}
Run Code Online (Sandbox Code Playgroud)
其中<archive_contents>包含带有空字符的tarball %,'以及\在单引号之间转义和包含的字符.
有没有更好的方法来做到这一点,以便不需要逃避?
(请不要指向我shar,makeself等等.我想从头开始写.)