一、总结
我想从循环中打印变量。
如果我echo $i
在循环命令之后放置:
elif我放在echo $i
来自循环的命令之前:
我没有找到:
- 为什么会这样,
- 如何在命令之前打印变量。
2.脚本应该做什么
我想要 HTMLTidy 验证output
该文件夹的文件夹和子文件夹中的所有 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 而不是 echo → 我得到了相同的行为。
- 我在 Google 中找不到我的问题的答案。
循环复合命令的退出状态
for
是其中执行的最后一个命令¹。返回false(非零退出状态),因为
false
是最后一个命令运行。echo
只要它成功地编写了我们告诉它的内容,它就会返回 true。如果您想在任何命令失败时返回false / failure,您需要记录失败,或者在第一次失败时退出:
tidy
或者:
如果失败(例如,当 stdout 指向文件系统上已满的文件时),那仍然可能返回false / failure 。
printf
如果您想忽略任何错误并且您的脚本在任何情况下都返回true / success ,只需在脚本末尾添加一个
true
或。exit 0
¹ 至少对于身体部位。对于
for i in $(exit 42); do :; done
,大多数 shell 返回 0(AT&T ksh 是例外)。他们都返回 0for i in; do :; done < "$(echo /dev/null; exit 42)"
。