명령의 각 반복마다 특정 매개 변수를 조정하여 중괄호 확장 (또는 다른 간단한 방법)을 사용하여 셸 명령을 반복 할 수 있습니까? 여기에 내가하고 싶은 간단한 예제가있다. (더 긴 명령을 사용한다.) cp a b; cp a c;중괄호 확장 명령이 인식되지 않습니다.
분명히, 터미널에 입력하면 작동합니다. 그러나 나는 그것을 더 조밀 한 방법으로 생성 할 수 있기를 원합니다. bash 중괄호 확장을 사용하려고했지만 오류가없는 명령을 제공합니다.
~/test $ ls
a
~/test $ cp\ a\ {b,c}\;
cp a b;: command not found
~/test $
백틱 사용은 작동하지 않습니다. - 그렇지 않으면 filename with a space
라는 이름의 파일이 별도의 네 가지로 변환됩니다
for arg in b c; do cp a "$arg"; done
따옴표가 중요하다 : 당신이 원하는만큼 정확하고 안전한 방식으로 이렇게
는~/test $ `cp\ a\ {b,c}\;`
cp a b;: command not found
당신은'cp a b;'의 단일 문자열을 만들고 있습니다. 그것은 명령이 아닙니다. 그것은 문자열입니다. "cp a b;"라고 입력 해보십시오. 당신의 껍질에 무엇이 일어 났는지 보아라. 'eval'없이 여기서하려는 일을 할 수 없습니다.'echo b c | xargs cp a'는 여기서하려고하는 일을해야하지만 실제 상황이 무엇인지 모른 채 더 나은 해결책을 제공 할 수는 없습니다. –
@etan 좋은 조언. 좀 더 명확한 방법은'for f in b c; cp a $ f 할; done'이지만, 그건 스타일의 문제 일뿐입니다. –
'eval cp \ a \ {b, c} \;'가 작동하는 것처럼 보입니다. 백틱과 $()의 차이점은 무엇입니까? – mike