bash - 尝试大写第一个字母时 Bash 错误替换
问题描述
我正在Bad substitution
为 Bash 中的错误撞墙。考虑以下代码:
getApiName() {
IFS='-' # hyphen (-) is set as delimiter
read -ra array <<< "$1" # str is read into an array as tokens separated by IFS
for i in "${array[@]}"; do # access each element of array
output+=${i^} #set first letter to uppercase
done
IFS=' '
echo ${output}
}
当我执行以下操作时:
getApiName "vl-date-picker"
我明白了line 21: ${i^}: bad substitution
我不知道出了什么问题。你们能帮帮我吗?
提前致谢。问候
解决方案
一般回答
我无法重现您的问题。我看到两个可能的原因:
您正在使用非 bash shell。
通过将命令添加ps
到脚本并查看输出来检查这一点。如果bash
输出中没有,那么您正在运行不同的东西。脚本开头的shebang#! /bin/bash
有助于确保bash
使用它,但不是保证。✱</p>您有一个旧版本的 bash,它不支持
${i^}
(例如 Mac OS X 上预装的 15 (!) 年旧版本)。
您可以使用 . 检查您的 bash 版本bash --version
。${i^}
是在 bash 4.0 中引入的,可以在此处(搜索hh. There are new case-modifying word expansions
)或此处阅读。
无论哪种方式,您都可以使用应该在所有 Posix shell 中工作的不同命令。
如果你有 GNU 版本的sed
(检查sed --version
)这个命令可能是
getApiName() {
printf %s "$1" | sed -E 's/(^|-+)(.)/\U\2/g'
}
特定于 Nmp 的答案
运行脚本的实际 shell 取决于平台。默认情况下,在类 Unix 系统上是 /bin/sh 命令,在 Windows 上是 cmd.exe。/bin/sh 所指的实际外壳也取决于系统。从 npm@5.1.0 开始,您可以使用 script-shell 配置自定义 shell。
因此,要解决您的问题,您只需配置 npm 即可bash
。
作为一种解决方法,您也可以bash
直接在脚本中调用。最简单的方法是这里的文档:
bash -s -- "$@" <<"EOF"
# your original script here
EOF
推荐阅读
- javascript - How to get chat id in telegram bot without message from user? Is it even real?
- flutter - type 'double' is not a subtype of type 'int' of 'function result'
- python-3.x - Python: TypeError: 'Label' object is not callable
- python - Pycharm add own function on rightclick menu
- typescript - 类型“{}”不可分配给类型“从不”。(2322)
- python - App-Store-Review-Scraping:AppStoreScraper 无法识别 app-id
- asp.net - 在提交给 HomeController 之前将 input[type=file] 转换为 Base64
- php - How do I redirect to another page in a condition using php?
- python - 如何在数字中添加文字?Python
- elasticsearch - 在 Elasticsearch 上,如何根据字段中的项目数进行聚合?