답변:
이것은 단지 "알고 싶어서"질문입니까, 아니면 실제 사용 사례가 있습니까? 우리는 그것을하기 위해 체조를 할 수 있습니다 :
$ eval echo\ {a,b,c}\;
a
b
c
그러나 나는 이런 종류의 난독 한 명령을 우리의 시스템 스크립트에 넣은 사람을 사냥했습니다.
명확성을 위해 왜 대신하지 않습니까?
$ for X in {a,b,c}; do echo $X; done
당신은 심지어 전체 돼지에게 가서 몇 줄을 개설하고 조금 들여 쓰기 할 수 있으므로 항상 당신이하려는 일을 이해할 수 있습니다.
for
효과가 있지만, 여전히 더 타이핑하고 있습니다 : P
eval git branch -d \{ branch-a, branch-b }\;
Mark Mann의 선택된 답변을 기반 으로이 예제를 더 도출 할 수 있었으며 이는 훌륭하게 작동합니다.
$ eval echo\ category_{17,32,33}.properties\{,.bak\}\;
category_17.properties category_17.properties.bak
category_32.properties category_32.properties.bak
category_33.properties category_33.properties.bak
표시되는 것은 한 줄에서 여러 번의 중괄호 확장을 사용할 때 Mark의 원래 예제는 모든 변형을 개별적으로 인쇄했을 것입니다. 대신, 그의 대답을 사용하여 여러 파일을 이동 / 이름 바꾸기를 원했습니다. 출력 형식에 일치되도록하여 mv
일반적으로 기대를 ( mv oldfilename newfilename
), I는이 평가 될 때까지 않을 그래서, 중괄호 확장 번째 발생을 탈출 한 후 초기 eval
명령이 실행되었다.
위의 출력이 예상대로 나타나면 다음 명령을 실행할 수있었습니다.
$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak category_32.properties.bak category_33.properties.bak
원래 답변에 대해 Mark에게 감사드립니다. 그의 대답이 나에게 허용 된 것을 좋아한다면 그의 대답을 투표하십시오 :-)
file-{r,b,g}{m,n,o}{x,y.z}.foo
27 개의 값을 모두 열거하는 것보다 짧은 형식을 사용하는 것이 좋습니다.