在 Zsh 参数扩展中,我有:
"${test_var:-"${HOME}/test"}"
但在这里我想检查是否${HOME}/test
存在,如果不存在则test_var
扩展到" "
(一个空格字符串)。
对此有内联解决方案吗?
答案1
echo ${test_var:-~/test(N)}
接近了。通过添加 a (N)
(这里就像我们在列表上下文中一样),它就~/test(N)
变成了一个 glob,并且由于该glob 限定符,如果( ) 中N
没有test
目录条目,那么 glob 就会扩展为空。$HOME
~
这与您所要求的不同,因为它扩展到什么都没有,而不是一个空格的争论。
为此,您仍然可以按照以下步骤进行:
f=(~/test(N)); echo ${test_var:-${f:-' '}}
您也可以使用命令替换,尽管这有点作弊:
echo ${test_var:-"${$(printf %s ~/test(N)):-' '}"}
或者:
echo ${test_var:-"$((){<<<${1-' '}} ~/test(N))"}