如何替换这个Zsh表达式中的变量



我需要在以下表达式中替换变量x

my-func() {
x="Hello world"
y=${1:?Missing argument, use $x}
echo -- $y
}

它在第一个函数的参数丢失时打印CCD_ 2;你好世界";。如何替换此错误消息中的变量?有可能吗?

使用'zsh','${var:?work(中的单词不会被插值,而是按原样打印。最有可能的是,bash、dash、ksh等bug将遵循POSIX标准:Fromhttps://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02

${parameter:?[word]}如果为Null或未设置,则表示错误。如果参数为unset或null,单词的扩展(或指示其为如果省略单词,则未设置(应写入标准错误shell以非零退出状态退出。否则参数应被替换。交互式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
}

可以通过将"exit"替换为"throw"(需要自动加载(来编写更高级的代码。

最新更新