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
여러 중괄호 세트가 확장되는 순서를 제어하는 방법이 있나요? 저는 이러한 주장뿐만 아니라 어떤 상황에서도 작동하는 것을 찾고 있습니다.
답변1
매개변수 확장과 가새 확장을 결합할 수 있습니다.
% 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
하지만 옵션과 구문의 올바른 조합을 사용해야 합니다. .)
답변2
당신 은 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
답변3
두 번째 그룹의 각 요소 끝에 숫자를 넣은 다음 마지막 문자를 정렬할 수 있습니다.
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' ' '
답변4
fish
셸 에서는 기본적으로 다음과 같은 동작을 수행합니다.fish
확장은 오른쪽에서 왼쪽으로 하기 때문에:
$ fish -c 'echo {a,b,c}{d,e,f}'
ad bd cd ae be ce af bf cf