只是想学习一点 bash 脚本。我的旧 bash 版本:
Bash version 3.2.53(1)-release...
我已经使用 homebrew 更新了 mac os x yosemite 上的 bash:
brew update
brew install bash
然后在终端属性中,我将标准 shell 路径从 更改为/bin/bash
(/usr/local/bin/bash
据我了解,这是 homebrew 安装更新的 bash 的地方)。
然后我再次检查了结果(看起来一切都很好):
$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...
但是当我尝试编写一个简单的 bash 脚本时:
#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
do
echo "Welcome $i times"
done
结果是:
Bash version 3.2.53(1)-release...
Welcome {0..10..2} times
代替:
Bash version 4.0.33(0)-release...
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times
为什么当我尝试在同一个 shell 中执行脚本时,Bash 版本会变回旧版本???这让我很害怕!请有人解释一下我的问题是什么)))
答案1
你的问题在第一行。你有这样的:
#!/bin/bash
它明确指出 shell 脚本应该与旧的一起运行/bin/bash
。真的想要的是这个:
#!/usr/local/bin/bash
使用新的bash
来自/usr/local/bin
。
答案2
安装新的 bash:
brew install bash
将其设为默认 shell:
chsh -s /usr/local/bin/bash
在脚本中设置环境:
#!/usr/bin/env bash
使用env
将在您的 Bash 中查找$PATH
并使用它遇到的第一个。您可以bash
通过输入来查看它将使用哪一个which bash
。如果它首先看到/bin/bash
,您将需要$PATH
在~/.bashrc
和中设置您的/.bash_profile
。
答案3
正如 pjv 指出的那样,你真的应该使用
#!/usr/bin/env bash
在你的脚本中随处可见,以便于移植。例如,如果你尝试使用
#!/usr/local/bin/bash
它将在大多数 Linux 系统上失败。