Bash内置,OSx与Linux

时间:2015-05-07 20:14:51

标签: bash

我注意到OSx和Linux之间内置的printf看起来行为不一样。我的印象是内置内置是内置的。这与我遇到的任何具体问题无关。我无法解释它。

OSX

printf '%(+%s)T\n' -2
-bash: printf: `(': invalid format character

which printf
printf is a shell builtin
printf is /usr/bin/printf

的Linux

printf '%(+%s)T\n' -2
+1431027100

which printf
printf is a shell builtin
printf is /usr/bin/printf

有关如何测试此内容的一些信息。在OSx上,我使用的是通过brew安装的bash版本。

OSx版本

bash --version
GNU bash, version 4.3.33(1)-release (x86_64-apple-darwin14.1.1)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

Linux版

bash --version
GNU bash, version 4.3.11(1)-release (i686-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

1 个答案:

答案 0 :(得分:4)

%()T是bash 4.x中最近添加的内容; OS X发布了bash 3.2(预计不会升级到4.x,因为Apple拒绝发布获得许可的GPLv3软件)。

如果bash --version告诉您OS X系统有bash 4,这可能是检查PATH中的bash版本与/bin/bash或{{1}中的版本的问题(用于您的脚本&she; s)或您的用户帐户配置的shell。

要查看当前版本的bash,请不要使用/usr/bin/bash(它告诉您 PATH 中第一个bash解释器的版本,而不是当前的口译员);相反,使用:

bash --version

如果你想确定你的脚本使用PATH中的第一个bash解释器(如果你安装了比Apple提供的bash更新的bash,那就像macportshomebrew一样 - 大概是你想要的),使用echo $BASH_VERSION ,而不是#!/usr/bin/env bash