Bash 백틱에 해당하는 일괄 처리


97

Bash로 작업 할 때 다음과 같이 한 명령의 출력을 다른 명령에 넣을 수 있습니다.

my_command `echo Test`

다음과 같을 것입니다.

my_command Test

(분명히 이것은 비실용적 인 예일뿐입니다.)

Batch에서 똑같은 일을 할 수 있는지 궁금합니다.


답변:


53

먼저 출력을 파일로 리디렉션하면됩니다. 예를 들면 :

echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%

16
임시 파일을 저장할 쓰기 권한이있는 위치를 찾아야합니다. 스스로 청소해야합니다. 바로이 예제를 통해 입력의 첫 줄만 읽을 수 있습니다. 모든 실용적인 목적을 위해 for /f변형이 훨씬 더 좋습니다.
Joey

@grawity - 함께%random%
bacar

1
@joey 각 줄을 읽지 만 단일 명령 에서 명령 줄 인수에 연결하는 방법 입니다.
user877329

개행을 어떻게 처리합니까?
andrewrk

103

cmd.exe 스크립트를 다음 for /f명령 과 함께 사용하여 유사한 기능을 얻을 수 있습니다 .

for /f "usebackq tokens=*" %%a in (`echo Test`) do my_command %%a

예, 그것은 다소 불명확하지만 (가장 적게 말하면) 거기에 있습니다.

for /?피투성이의 세부 사항을 참조 하십시오.

사이드 노트 : echo" for /f"명령 에서 백틱 안에 " " 를 사용 하는 것은에 대한 내부 명령 cmd.exe /c echo Test이기 때문에 " "를 사용하여 수행해야한다고 생각 했지만 더 자연스러운 방식으로 작동합니다. Windows 배치 스크립트는 항상 저를 놀라게합니다 (하지만 일반적으로 좋은 방식은 아닙니다).echocmd.exe


2
일반적으로 쉘을 자동으로 생성하지 않는 외부 프로그램에서 쉘 내장 기능을 실행할 때이 작업을 수행해야합니다. 즉 C의는 system()그것이 어떤 경우에 쉘을 시작하지만 .NET 년대 이후, IIRC, 괜찮다고 Process.Start명시 적으로 요구 쉘 호출합니다. 그런 것, iirc. 어쨌든, 나는 이것이 받아 들여진 것보다 더 나은 대답이라고 생각합니다 :-)
Joey

2
for아프지 않고 문제를 혼동하는 옵션 . 이건 어떨까요 :for /f %%a in ('"echo Test"') do my_command %%a
Evan Haas

9
일괄 스크립트가 아닌 명령 줄에서 동일한 항목을 실행할 때 %% 대신 단일 %를 사용하십시오.
jsears 2014

2
예를 들어 ">"연산자와 같이 배관에서 잘 작동하지 않는 것 같습니다. 그러나 그렇지 않으면 이것은 굉장합니다. 이것이 내가 가진 % 대 %% 문제가 아니라면.
조나단

3
@Evan : tokens=*중요합니다. 그렇지 않고 명령 결과에 공백이 포함 된 경우 첫 번째 단어 만 출력됩니다. 프롬프트에서 다음을 실행하십시오 for /f %a in ('"echo foo bar"') do echo "%a".. 인쇄 "foo"됩니다.
Dan Dascalescu 2014

29

"for"명령에 대한 문서를 읽으십시오. for /?

슬프게도 직접 ​​확인하기 위해 Windows에 로그인하지 않았지만 다음과 같이 원하는 내용을 대략적으로 확인할 수 있습니다.

for /F %i in ('echo Test') do my_command %i

6
다른 사람이이 문제를 발견하는 경우 명령이 배치 파일 (* .bat)에서 실행될 때 두 % i 변수는 모두 이중 퍼센트 기호 (%% i) 여야합니다.
mgouin

3

항상 Windows 내 에서 Bash를 실행할 수 있습니다. 나는 항상 MSYS로 그것을한다 ( Cygwin 보다 훨씬 더 효율적이다 ).


불행하게도 MSYS는 거의 별도로 설치해야합니다 최신 bash는 얻을 지금 유지
에드 랜달

1
BusyBox는 훨씬 더 작습니다 (~ 432KB). 그러나 전체 Bash는 아니지만 Ash 만 있습니다. 여기에 씨께 서 비공식적 윈도우 포트를 얻기 : frippery.org/busybox
마틴에게

3

아마도 나는 표준 for /f방법 의 구문을 망쳐 놓고 있을지도 모르지만 , &&와 | 의 한계에서 백틱 내에서 for /f문제가 발생합니다. 임의의 복잡성 명령을 처리하기 위해 평소에서 약간의 수정이 가능합니다.

SET VV=some_command -many -arguments && another_command -requiring -the-other -command | handling_of_output | more_handling
for /f "usebackq tokens=*" %%a in (`%VV%`) do mycommand %%a

전체 및 복잡한 명령을 변수에 먼저 넣은 다음 복잡한 명령을 for 루프의 한계에 직접 넣는 대신 한계에 변수에 대한 참조를 넣으면 구문 해석 문제를 피할 수 있습니다. 현재 VV위의 예 에서 변수로 설정 한 정확한 명령을 사용 된 위치에 복사 %VV%하면 구문 오류가 발생합니다.


1
이것은 저에게 효과가 없었지만 캐럿 (^)으로 이스케이프하면 for 명령 내에서 직접 파이핑을 수행 할 수 있음을 발견했습니다. for / f "usebackq tokens = *"%% a in (`command ^ | command`) do command %% a
Heptite 2015 년

@Heptite 카드 이스케이프는 나를 위해 작동하지 않았지만 큰 따옴표로 둘러싼 명령 줄은 작동했습니다.
Alexandr Zarubkin

@Heptite 제 경우에는 미리 실행해야 할 일련의 명령을 몰랐고, 한 경우에는 파일에서 추출되어 다른 경우에 전달되었습니다. 이스케이프를 사용하면 실행될 인터프리터 수와 일관된 수의 인터프리터가 아닌 사용 사례에 따라 명령을 이스케이프 할 횟수를 알아야합니다.
mtalexan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.