1. 요약
루프에서 변수를 인쇄하고 싶습니다.
만약에echo $i
루프 명령 뒤에 넣었습니다 .
일생echo $i
루프 명령 앞에 다음을 넣었습니다 .
나는 그것을 찾지 못했습니다:
- 왜 이런 일이 일어나는가?
- 명령 전에 변수를 인쇄하는 방법.
2. 스크립트가 수행해야 하는 작업
나는 사용한다내 HTML 유효성을 검사하기 위한 HTMLTidy.
output
나는 HTMLTidy가 이 폴더의 폴더와 하위 폴더에 있는 모든 HTML의 유효성을 검사하기를 원합니다 .
바라보다간단한 구성내 프로젝트.
동등한 Windows 배치 스크립트 작업:
@echo off
FOR /R %%i IN (*.html) DO echo %%i & tidy -mq %%i
3. 재현 단계
콘솔에서 인쇄합니다.
cd output && bash ../tidy.sh
../tidy.sh
— 내 스크립트의 경로는 다음을 참조하세요.간단한 구성.
4. 종료 코드 0
만약에 tidy.sh
:
shopt -s globstar
for i in **/*.html; do
tidy -mq $i
echo $i
done
$ cd output && bash ../tidy.sh
line 8 column 9 - Warning: trimming empty <span>
SashaInFolder.html
line 8 column 9 - Warning: trimming empty <div>
subfolder/SashaInSubFolder.html
The command "cd output && bash ../tidy.sh" exited with 0.
Done. Your build exited with 0.
5.종료 코드 1
일생:
shopt -s globstar
for i in **/*.html; do
echo $i
tidy -mq $i
done
$ cd output && bash ../tidy.sh
SashaInFolder.html
line 8 column 9 - Warning: trimming empty <span>
subfolder/SashaInSubFolder.html
line 8 column 9 - Warning: trimming empty <div>
The command "cd output && bash ../tidy.sh" exited with 1.
Done. Your build exited with 1.
6. 도움이 되지 않음
- 나는 노력한다에코 대신 printf→ 저도 같은 행동을 합니다.
- Google에서 내 질문에 대한 답변을 찾을 수 없습니다.
답변1
루프 복합 명령의 종료 상태는 for
그 안에서 실행된 마지막 명령의 종료 상태입니다.
for cmd in true false; do
"$cmd"
done
상품을 반품하다잘못된(0이 아닌 종료 상태) false
이것이 마지막 명령 실행이었기 때문입니다.
echo
우리가 말한 내용을 성공적으로 작성하는 한 이는 true를 반환할 것입니다.
돌아가고 싶다면잘못된/실패하다만약에어느명령이 tidy
실패하면 실패를 기록하거나 첫 번째 실패 시 종료해야 합니다.
#! /bin/bash -
shopt -s globstar
ok=true
for i in ./**/*.html; do
if tidy -mq "$i"; then
printf '%s\n' "$i"
else
ok=false
fi
done
"$ok"
또는:
#! /bin/bash -
shopt -s globstar
for i in ./**/*.html; do
tidy -mq "$i" || exit # if tidy fails
printf '%s\n' "$i"
done
그 사람은 아직 돌아올 수 있어잘못된/실패하다실패하는 경우 printf
(예: stdout이 가득 찬 파일 시스템의 파일을 가리키는 경우)
오류를 무시하고 스크립트가 반환되는 경우진짜/성공어쨌든 true
스크립트 끝에 또는 를 추가하면 됩니다.exit 0
적어도몸부분. 의 경우 for i in $(exit 42); do :; done
대부분의 쉘은 0을 반환합니다(AT&T ksh 제외). 그들은 모두 0 을 반환합니다 for i in; do :; done < "$(echo /dev/null; exit 42)"
.