for 命令在 DOS(Windows 命令行)和 Linux(Bash 或其他 Shell)中的语法和功能有显著差异。以下是主要区别的详细对比:
cmd.exe)for %变量 in (集合) do 命令
%i),在批处理文件中需用 %%i。*.txt)、显式列表(如 1 2 3)或文件内容。echo %i)。示例:
for %i in (1 2 3) do echo %i
for 变量 in 列表; do 命令; done
i),使用时加 $(如 $i)。$(seq 1 3))或数组。示例:
for i in 1 2 3; do echo $i; done
batch
for %f in (*.txt) do echo %f/L 参数实现数字序列:
batch
for /L %i in (1,1,5) do echo %i # 输出 1 到 5bash
for i in {1..5}; do echo $i; donebash
for file in $(ls *.txt); do echo $file; donebash
arr=("a" "b"); for i in "${arr[@]}"; do echo $i; done/F 参数解析文本(如文件或命令输出):
batch
for /F "tokens=*" %i in ('dir /b') do echo %iawk/sed 等工具:
bash
for line in $(cat file.txt); do echo $line; done
或更安全的:
bash
while IFS= read -r line; do echo "$line"; done < file.txt/D 仅遍历目录。/R 递归子目录:
batch
for /R %i in (*.txt) do echo %ifind 实现递归:
bash
for file in $(find . -name "*.txt"); do echo "$file"; donebreak/continue 控制流程。| 场景 | DOS | Linux |
|---|---|---|
| 遍历文件 | for %i in (*.txt) do echo %i |
for i in *.txt; do echo $i; done |
| 数字循环 | for /L %i in (1,1,5) do... |
for i in {1..5}; do... |
| 逐行读取文件 | for /F %i in (file.txt) do... |
while read line; do... |
| 递归遍历目录 | for /R %i in (*) do... |
find . -exec 或 for + find |
/L, /R, /F)扩展。find, awk)无缝结合,适合复杂任务。若需跨平台脚本,需注意语法转换或使用工具(如 Cygwin/WSL 在 Windows 上运行 Bash)。