macOS High Sierra上的参数替换错误替换错误

Cat*_*sta 9 macos bash

${parameter[^|^^|,|,,][pattern]}参数替代是给我一个坏的替代误差.

$ echo $greeting
hello world
$ echo "${greeting^}."
-bash: ${greeting^}.: bad substitution
Run Code Online (Sandbox Code Playgroud)

我更新到最新bash版本并继续收到错误.

GNU bash, version 4.4.19(1)-release (x86_64-apple-darwin17.3.0)
Run Code Online (Sandbox Code Playgroud)

我到处寻找,我发现的唯一建议是确保它正在运行bash4.

$ echo $SHELL
/bin/bash
Run Code Online (Sandbox Code Playgroud)

我正在运行macOS High Sierra.

Ini*_*ian 5

您的默认shell 不是bash shell(从中下载brew install bash),其中包含v4支持您所引用的参数扩展语法的shell .

在macOS上echo $BASH_VERSION会告诉你当前shell的版本.bash --version告诉你的第一个版本bash在你的$PATH.因此,您查看该版本的方式并没有告诉您正在运行的版本.

您需要将最新版本bash的文件/etc/shells作为最后一行添加到文件中,并使用该命令将shell设置为默认值Terminal

chsh -s /usr/local/bin/bash "$USER"
Run Code Online (Sandbox Code Playgroud)

在这之后关闭并重新打开Terminal以使其生效.如果不在您的内容中添加此默认选项,Terminalbash只能在解释器设置为的脚本上使用最近的选项#!/usr/local/bin/bash

另请参阅此问题不同的答案 - 在OSX上将bash更新到4.0版