在循环中处理bash中的特殊字符

ʞɔı*_*ɔıu 4 bash shell command-line

假设我有一个文件列表

file1
"file 1"
file2
Run Code Online (Sandbox Code Playgroud)

for ... in循环在空格之间划分它,而不是换行符:

for x in $( ls ); do
   echo $x
done
Run Code Online (Sandbox Code Playgroud)

结果:

file
1
file1
file2
Run Code Online (Sandbox Code Playgroud)

我想在每个文件上执行命令.上面的"file"和"1"不是实际文件.如果文件名包含空格或逗号等内容,我该怎么办?

它比我想象的有点棘手-print0 | xargs -0可以处理,因为我实际上希望命令类似于"convert input/file1.jpg .... output/file1.jpg",所以我需要在进程中置换文件名.

Jor*_*dan 8

实际上,Mark的建议工作正常,甚至没有对内部字段分隔符做任何事情.问题是在子shell中运行ls,无论是通过反引号还是$()​​导致for循环无法区分名称中的空格.简单地使用

for f in *
Run Code Online (Sandbox Code Playgroud)

而不是ls解决了问题.

#!/bin/bash
for f in *
do
 echo "$f"
done
Run Code Online (Sandbox Code Playgroud)