오른쪽에서 왼쪽으로 쉘 괄호 확장 bf cd ce cf 내 목적을 위해

zsh (및 다른 쉘)에서 (예를 들어)와 같은 인수를 포함하면 :

{a,b,c}{d,e,f}

괄호 확장은 다음과 같이 바뀝니다.

ad ae af bd be bf cd ce cf

내 목적을 위해 인수 순서가 중요하며 왼쪽에서 오른쪽 대신 오른쪽에서 왼쪽으로 확장하려면 괄호가 필요합니다. 즉, 확장을 원합니다.

ad bd cd ae be ce af bf cf

여러 괄호 세트가 확장되는 순서를 제어하는 ​​방법이 있습니까? 나는 이러한 주장뿐만 아니라 어떤 상황에서도 효과가있는 것을 찾고 있습니다.



답변

매개 변수 확장을 가새 확장과 결합 할 수 있습니다.

% foo=(d e f)
$ echo {a,b,c}${^foo}
ad bd cd ae be ce af bf cf

foo개별적 으로 정의하지 않으려는 경우 (가능한 것처럼) 다음을 사용할 수 있습니다.

$ echo {a,b,c}${^:-d e f}
ad bd cd ae be ce af bf cf

당신이있는 경우 rcexpandparam옵션 세트를, 당신은 필요하지 않습니다 ^이 동작을 가능하게하는 하나의 예에서.

(참고 : 테스트하는 동안 shwordsplit옵션도 설정했습니다. 설정하지 않은 경우 예를 들어보십시오 echo {a,b,c}${^=:-d e f}. 이야기의 도덕 : 거의 모든 것이 가능 zsh하지만 올바른 사용법을 사용해야합니다 옵션과 구문의 조합)


답변

다음 과 같이 지정된 수의 열 인수를 zsh사용할 수 있습니다 .-C print

print $(print -C3 {a,b,c}{d,e,f})

…를 얻기 위해 …

ad bd cd ae be ce af bf cf

$IFS분할 없이 :

print -C3 {a,b,c}{d,e,f}

…인쇄물…

ad bd cd
ae be ce
af bf cf

…하지만 당신은 그렇게 전에 아래로 그것을 할 수 있습니다 …

print -aC3 {a,b,c}{d,e,f}

ad ae af
bd be bf
cd ce cf

…또는…

print $(print -aC2 {foo,bar}{bad,baz})

foobad foobaz barbad barbaz

답변

두 번째 세트의 각 요소 끝에 숫자를 넣은 다음 마지막 문자를 기준으로 정렬 할 수 있습니다.

echo -e "\n"{a,b,c}{d1,e2,f3} | sort -k 1.3 | cut -c 1-2 | tr '\n' ' '

문자가 아닌 필드를 자르려면 구분 기호 (공백) 뒤에 숫자를 추가하는 것이 더 좋습니다.

echo -e "\n"{a,b,c}{"d 1","e 2","f 3"} | sort -k 2n | cut -f 1 -d ' ' -s | tr '\n' ' '

답변

fish셸 에서는 확장 fish이 오른쪽에서 왼쪽으로 수행 되므로 기본적으로 해당 동작이 있습니다 .

$ fish -c 'echo {a,b,c}{d,e,f}'
ad bd cd ae be ce af bf cf