ʞɔı*_*ɔı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",所以我需要在进程中置换文件名.
实际上,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)