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 维基。| 归档时间: |
|
| 查看次数: |
717 次 |
| 最近记录: |