editAppsDotPy() {
echo 'from django.apps import AppConfig' >> apps.py
echo >> apps.py
echo >> apps.py
echo "class ${APP_NAME}Config(AppConfig):" >> apps.py
echo " name = '${APP_NAME}'" >> apps.py
}
您如何在第5行中将变量大写?
我试图用${APP_NAME^}
来做到这一点,但是它返回了一个错误。
答案 0 :(得分:3)
您的函数经过重写,可以使用更多的shell:
script.sh
:
#!/usr/bin/env sh
capitalize()
{
printf '%s' "$1" | head -c 1 | tr [:lower:] [:upper:]
printf '%s' "$1" | tail -c '+2'
}
editAppsDotPy()
{
cat >> 'app.py' <<EOF
from django.apps import AppConfig
class $(capitalize "$APP_NAME")Config(AppConfig):
name = '$APP_NAME'
EOF
}
APP_NAME='foo'
editAppsDotPy
删除:
sh script.sh
cat app.py
输出:
from django.apps import AppConfig
class FooConfig(AppConfig):
name = 'foo'
答案 1 :(得分:3)
假设 tr 在您的路径中,更常见的参数替换也可以为您提供帮助。 您的第五行可能如下所示:
echo "class `tr [:lower:] [:upper:] <<<${APP_NAME:0:1}`${APP_NAME:1}Config(AppConfig):" >> apps.py
我也在zsh 5.8中对此进行了测试。
答案 2 :(得分:1)
如果您的bash
版本太旧而无法支持该扩展名(例如OS X版本),或者您使用的zsh
之类的外壳根本不支持该扩展,必须转向别的东西。就个人而言,我喜欢perl
(我认为 OS X附带的内容):
$ perl -ne 'print ucfirst' <<<"foobar"
Foobar
或较长字符串中间的内容:
$ foo=bar
$ echo "foo='$(perl -ne 'print ucfirst' <<<"$foo")'"
foo='Bar'
可在bash
和zsh
中使用。