解决 Bash 中的 bad substitution 错误
Yahya Irmak
2022年4月20日
变量替换可用于在 Bash 脚本中操作变量的值。但是,此功能并非在每个 shell 中都可用。
本文将解释如何解决 Linux Bash 中的 bad substitution
错误。
解决 Bash 中的 Bad Substitution
错误
我们可以通过使用变量替换从变量中获取子字符串来执行各种操作。让我们检查下面的示例 Bash 脚本。
第一行称为 shebang。它用于告诉操作系统使用哪个 shell 来解析文件。
我们在第二行定义了一个名为 str
的字符串变量。然后我们将 hello
和 world
子字符串分配给单独的变量。
它看起来像一个完全正确的代码。
#!/bin/sh
str="hello world"
hello=${str:0:5}
world=${str:6}
但是当我们执行这段代码时,我们得到一个 Bad substitution
错误。因为在 Ubuntu 中,/bin/sh
指向 dash shell。
不幸的是,dash shell 没有变量替换功能。
你可以使用以下命令查看 /bin/sh
指向哪个 shell。
which sh
ls -l /bin/sh
如你所见,/bin/sh
是指向 /bin/dash
的符号链接。要更改使用的 shell 并解决 bad substitution
错误,我们必须首先将第一行代码更改为 #!/bin/bash
。
因此,代码不再使用 dash 而是使用 bash 执行。
但是,你仍应避免在添加此语句后使用 sh file.sh
命令执行该文件。如果你这样做,#!/bin/bash
行将被忽略。
它仅在你直接执行脚本时使用。
你可以使用 ./file.sh
或 bash file.sh
命令执行该文件。你将不再收到此错误。
Author: Yahya Irmak
Yahya Irmak has experience in full stack technologies such as Java, Spring Boot, JavaScript, CSS, HTML.
LinkedIn