[bash] “모호한 리디렉션”오류 발생

내 Bash 스크립트의 다음 줄

 echo $AAAA"     "$DDDD"         "$MOL_TAG  >>  ${OUPUT_RESULTS}

이 오류가 발생합니다.

 line 46: ${OUPUT_RESULTS}: ambiguous redirect

왜?



답변

배쉬는 때로는 꽤 둔감 할 수 있습니다.

다음 명령은 기본적으로 동일한 오류에 대해 서로 다른 오류 메시지를 반환합니다.

$ echo hello >
bash: syntax error near unexpected token `newline`

$ echo hello > ${NONEXISTENT}
bash: ${NONEXISTENT}: ambiguous redirect

$ echo hello > "${NONEXISTENT}"
bash: : No such file or directory

변수 주위에 따옴표를 추가하면 “모호한 리디렉션”메시지를 처리하는 좋은 방법 인 것 같습니다. 입력 실수를 했을 때파일 이름의 공백으로 인해 오류가 발생 하면 더 나은 메시지를받는 경향이 있습니다 . 따옴표를 사용하는 것이 해결책입니다.


답변

명명 된 변수 OUPUT_RESULTSOUTPUT_RESULTS있습니까 아니면 더 가능성이 있습니까?


michael@isolde:~/junk$ ABC=junk.txt
michael@isolde:~/junk$ echo "Booger" > $ABC
michael@isolde:~/junk$ echo "Booger" >> $ABB
bash: $ABB: ambiguous redirect
michael@isolde:~/junk$ 


답변

변수 주위에 따옴표를 넣으십시오. 공백이 있으면 “모호한 리디렉션”도 제공합니다. 또한 철자를 확인하십시오

echo $AAAA"     "$DDDD"         "$MOL_TAG  >>  "${OUPUT_RESULTS}"

예를 들어 모호한 리디렉션

$ var="file with spaces"
$ echo $AAAA"     "$DDDD"         "$MOL_TAG >> ${var}
bash: ${var}: ambiguous redirect
$ echo $AAAA"     "$DDDD"         "$MOL_TAG >> "${var}"
$ cat file\ with\ spaces
aaaa     dddd         mol_tag


답변

최근에 리디렉션 파일 이름에 공백이 있으면 “모호한 리디렉션”메시지가 나타납니다.

예를 들어 리디렉션 application$(date +%Y%m%d%k%M%S).log하고 잘못된 서식 문자를 지정하면 오전 10시 전에 리디렉션이 실패합니다. 그러나 사용한 application$(date +%Y%m%d%H%M%S).log경우 성공합니다. 이는 %k형식 ' 9'이 오전 9시에 %H생성 '09'되고 오전 9 시에 생성 되기 때문 입니다.

echo $(date +%Y%m%d%k%M%S) 준다 20140626 95138

echo $(date +%Y%m%d%H%M%S) 준다 20140626095138

잘못된 날짜는 다음과 같습니다.

echo "a" > myapp20140626 95138.log

다음은 원하는 것입니다.

echo "a" > myapp20140626095138.log


답변

$ {OUPUT_RESULTS}에 지정된 경로에 공백 문자가 포함되어 있습니까? 그렇다면 ... >> "${OUPUT_RESULTS}"따옴표 사용을 고려할 수 있습니다 .

(변수 이름을로 바꾸는 것도 좋습니다 ${OUTPUT_RESULTS})


답변

방금 bash 스크립트 에서이 오류가 발생했습니다. 문제는 이전 줄의 끝에 실수로 오류가 발생한 것이 었습니다.


답변

“모호한 리디렉션”을 유발할 수있는 또 다른 사항 \t \n \r은 작성중인 변수 이름에 있습니다.

아마 \n\r아닐까요? 그러나주의의 측면에서 잘못

이 시도

echo "a" > ${output_name//[$'\t\n\r']}

\t줄의 시작 부분에 HTML, 탭을 구문 분석하는 동안이 문제에 부딪 쳤습니다 .