Zsh:在扩展之前检查文件是否存在

Zsh:在扩展之前检查文件是否存在

在 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))"}

相关内容