때로는 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