有时我想将参数扩展标志应用于 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