2012-05-18 3 views
1

파일에서 다른 스크립트 내의 bash 스크립트에 공백 행을 전달하는 방법은 무엇입니까?파일에서 bash 스크립트에 인수로 공백 행을 넘김

여기에 자세한 내용이 나와 있습니다. 스크립트 바는 inputfile에서 행을 읽어서 배열에 저장하고 배열 요소를 옵션 및/또는 인수로 스크립트 foo에 전달합니다. 입력 파일은 다음과 같습니다.

-l file1 
dirA 

-c 
-lc file2 
file2 

-cd file3 
file4 

(등) 스크립트 바는 파일을 한 줄 한 줄씩 읽고 빈 줄에 두 개의 빈 요소를 포함하여 배열을 올바르게 만듭니다. (각 배열 요소를 에코하여이를 확인했습니다.) 그러나 막대가 루프에서 배열을 가로 질러 각 요소를 스크립트 foo에 전달하면 두 개의 빈 요소는 건너 뜁니다. 따라서 스크립트 foo가 0 인수와 0 옵션으로 호출되어야하는 경우는 단순히 발생하지 않습니다. 스크립트 foo의 다른 모든 실행은 예상대로 실행됩니다.

아마도 입력 파일에 개행 문자가 없기 때문에 배열의 해당 요소가 빈 문자열을 포함하지 않고 null로만 표시 될 수 있다고 생각했습니다. 그래서 입력 파일 "공백"줄에 공백을 두어 공백을 넣으려고했지만 결과는 같았습니다.

입력란에 공백 문자가 있거나 공백 문자 만있는 행이있는 경우 bar가 인자없이 foo를 제대로 호출하도록하려면 어떻게해야합니까?

나는이 질문이 분명하기를 바랍니다. 당신의 도움을 주셔서 감사합니다!

EDIT. 누군가 내가 스크립트를 게시 할 것을 제안 했으므로 여기에 관련 부분이 있습니다.

나는 이것이 IFS를 설정하지 않은 것처럼 보입니다. 이것은 내 스크립트의 일부이기 때문입니다. 나는이 문제가 어딘가에 있다고 확신한다; 배열은 빈 줄이있는 두 요소로 제대로 빌드되지만 이러한 요소는 for ... in 루프에서 건너 뜁니다.

+2

스크립트를 게시 할 수 있습니까? – g13n

+0

길어요. > 60 라인. 나는 그것을 게시하는 것이 문제를 더 명확하게 만들 것이라는 것을 모른다. 저는 set -x를했습니다.이 명령은 인자가 0이고 옵션이없는 foo에 대한 두 번의 호출이 일어나지 않았 음을 보여줍니다. bar는 배열의 요소를 건너 뜁니다. – verbose

+0

물론 명확한 점이 있습니다. 라인을 추가하는 방법과'foo' 스크립트를 호출하는 방법을 구체적으로 확인하고 싶습니다. – g13n

답변

1

필요한 경우 큰 따옴표를 추가하면 올바르게 작동합니다. (당신이 줄을 반복하는 방법을 보여주지 않았기 때문에 나는 단지 짐작하고 있습니다.)

#! /bin/bash 
switches=('-n a' 
    '-e "b\nc"' 
    '' 
    x) 
for s in "${switches[@]}" ; do 
    echo $s 
done 
+0

제안 해 주셔서 감사합니다! 위의 관련 스크립트 부분을 게시했습니다. – verbose

+0

@verbose : 네, 그게 전부입니다. '$ {tests [@]}'주위에 큰 따옴표를 추가하십시오. – choroba

+0

감사합니다. choroba! 그게 효과가 있었어! 나는 매우 고맙다.왜 작동하는지 설명해 주시겠습니까? 또는 큰 따옴표가 필요한 이유를 알 수있는 곳을 알려주십시오. – verbose

관련 문제