변수를 반복하는 방법

변수를 반복하는 방법

내 csh 스크립트에는 최소 2줄의 출력을 제공할 수 있지만 그 이상일 수도 있는 명령이 있습니다. 이 줄을 별도의 변수로 변환하여 다른 명령에 전달하려고 합니다. 명령 1에서 출력된 각 변수에 대해 반복하고 실행하도록 두 번째 명령을 어떻게 설정합니까? 다음은 명령 1의 출력을 변수로 바꾸는 내가 가진 것입니다.

set vars = `echo "command 1"`

set numRows = $#vars  
if ($numRows < 2) then  
        echo "ERROR! $numRows rows!"  
        exit  
endif  


`echo '/command2 -L '$vars[1]'`

답변1

참고로 저는 제 자신을 미워하지 않기 때문에 csh가 아닌 bash를 사용하고 있습니다. 하지만 csh에서는 이 모든 작업을 수행할 수 있으므로 번역만 하면 됩니다. 대신 bash에서 작업하려면 먼저 "bash --login"을 실행한 다음 bash에서 작업하면 됩니다.

쉘 스크립트에서 설명하는 일종의 작업을 수행하기 위해 우리는 프로그래밍 언어에서처럼 루프가 아닌 파이프를 사용합니다. 오해하지 마세요, 저기요~이다csh와 bash에서 구조를 반복하지만 설명하신 내용에 대해서는 다르게 수행합니다.

여러 줄의 출력을 생성하는 명령이 있고 해당 줄이 다른 명령에 의해 한 번에 하나씩 실행되도록 하려면 두 명령을 파이프 | , 아마도 다음과 같습니다:

고양이 파일.txt | grep "어떤 단어들"

grep 명령은 파이프로 cat 명령의 STDOUT에 연결된 STDIN에서 들어오는 각 행을 처리합니다. 이것은 사소한 예이지만 도움이 됩니다.

또 다른:

에코 '하나, 둘, 셋' | tr ',' '\n'

그러면 모든 쉼표가 개행 문자로 바뀌어 한 줄 입력에서 세 줄 출력이 생성됩니다.

디렉토리에 있는 모든 파일의 이름에 확장자를 추가하려면 다음과 같이 하면 됩니다.

cd directory
for filename in *
do
  mv ${filename} ${filename}.extension
done

*는 파일 글로빙 패턴입니다. 파일 글로빙은 명령줄의 패턴이 글로빙 패턴과 일치하는 현재 디렉터리의 파일 이름으로 대체되는 경우입니다. *는 "무엇이든"을 의미합니다.

관련 정보