app*_*nic 3 shell freebsd bash
我有这个代码:
[[ "$1" =~ [/\\]$ ]]
Run Code Online (Sandbox Code Playgroud)
在 linux 上它工作得很好,但是当我在 FreeBSD 上测试它时发生了一个错误:./projekt2.sh: [[: not found
它......我有任何替代方法可以在两个系统上工作吗?谢谢
BASH 版本:4.3.30(1)-发布
[[
是一种bashism。 /bin/sh
不保证是 Bourne Again shell。
即使在 Linux 操作系统上,它也可以是 Debian Almquist shell,或 Policy-Compliant Ordinary shell。在 BSD 上,它不是开箱即用的 Bourne Again shell,因为在 BSD 上,Bourne Again shell 是操作系统本身的可选附加组件。它在FreeBSD 端口集合中。(“ports”是在 FreeBSD 上从这些程序的外部维护的源代码库中构建附加程序的便捷方法,而不是 FreeBSD 的一部分。)
/bin/sh
在 BSD 上通常是 Bourne 的早期重写之一。在 FreeBSD 上它是 Almquist shell,就像在 Debian Linux 上一样。(在 OpenBSD 上,它是在 POSIX 模式下运行的 Korn shell。)
bashisms 有一个简单的规则:
如果您在脚本中使用 bashisms,请明确设置/bin/bash
为脚本解释器。如果改为使用/bin/sh
作为脚本解释器,然后坚持到POSIX符合的shell语言孤单。
=~
也是一种 bashism,而不是该test
命令的 POSIX 兼容语法的一部分。但是这里的正则表达式有点矫枉过正,因为您显然真正要做的就是检查最后一个字符。
以下是 Thorsten Glaser 在 2012 年提出的关于做这些事情的建议:
案例 1 美元 */|*\\) 微博;; *) 摇摆不定;; esac
sh
. 2014-01-26。FreeBSD 通用命令手册。/bin/sh
。Ubuntu 维基。/bin/sh
。Debian 维基。