将参数扩展标志应用于 zsh 中的字符串或数组文字

将参数扩展标志应用于 zsh 中的字符串或数组文字

有时我想将参数扩展标志应用于 zsh 中的字符串或数组文字。作为一个示例用例,假设我想用$arglist逗号分割一些逗号分隔的字符串,但在前面添加一些内容。如果能够做到这一点那就太好了:

${(s/,/)arg1,arg2,$restofarglist}

当然,还有其他方法可以解决这个特定问题,而且我知道我总是可以先分配给参数,然后应用标志。但问题是:我可以以某种方式将标志直接应用于文字吗?

答案1

我认为您正在寻找:-参数替换:

$ restofarglist='abc,def'
$ echo ${(s/,/)${:-arg1,arg2,$restofarglist}}
arg1 arg2 abc def

来自 man zsh:

${name:-word}
              If name is set, or in the second form is non-null, then substitute its value;
              otherwise substitute word.  In the second form name may be omitted, in  which
              case word is always substituted.

实际上你可以让这个例子更短一些:

$ echo ${${:-arg1,arg2,$restofarglist}//,/ }
arg1 arg2 abc def

相关内容