如何解决如何在此Zsh表达式中替换变量?
我需要在此表达式中替换变量x
:
my-func() {
x="Hello world"
y=${1:?Missing argument,use $x}
echo -- $y
}
它在缺少第一个函数的参数而不是“ Hello world”时输出$x
。如何在此错误消息中替换变量?可能吗?
解决方法
使用'zsh',不会对'$ {var:?work)中的单词进行插值,而是按原样打印。 bash,dash,ksh和其他形式的错误很可能会遵循POSIX标准:来自https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02
$ {parameter:?[word]}指示错误,如果为Null或未设置。如果参数是 unset或null,即单词的扩展(或表明它是 如果省略单词则未设置)应写入标准错误,并且 shell以非零退出状态退出。否则,值 参数应被替换。交互式外壳无需退出。
另一种解决方案是进行显式检查:
my-func() {
x="Hello world"
# y=${1:?Missing argument,use $x}
if [ ! "$1 ] ; then
echo "$funcstack[1]: $LINENO: \$1: missing argument use $x" >&2
exit 1
fi
y=${1}
echo -- $y
}
通过将“出口”替换为“投掷”(需要自动加载),可以编写更多更高级的代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。