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

관련 정보