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 到 5
bash
for i in {1..5}; do echo $i; done
bash
for file in $(ls *.txt); do echo $file; done
bash
arr=("a" "b"); for i in "${arr[@]}"; do echo $i; done
/F
参数解析文本(如文件或命令输出):
batch
for /F "tokens=*" %i in ('dir /b') do echo %i
awk
/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 %i
find
实现递归:
bash
for file in $(find . -name "*.txt"); do echo "$file"; done
break
/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)。