相关疑难解决方法(0)

如何在bash循环列表中转义空格?

我有一个bash shell脚本循环遍历某个目录的所有子目录(但不是文件).问题是某些目录名称包含空格.

以下是我的测试目录的内容:

$ls -F test
Baltimore/  Cherry Hill/  Edison/  New York City/  Philadelphia/  cities.txt
Run Code Online (Sandbox Code Playgroud)

以及遍历目录的代码:

for f in `find test/* -type d`; do
  echo $f
done
Run Code Online (Sandbox Code Playgroud)

这是输出:

test/Baltimore
test/Cherry
Hill
test/Edison 
test/New
York
City
test/Philadelphia

Cherry Hill和纽约市被视为2或3个单独的条目.

我尝试引用文件名,如下所示:

for f in `find test/* -type d | sed -e 's/^/\"/' | sed -e 's/$/\"/'`; do
  echo $f
done
Run Code Online (Sandbox Code Playgroud)

但无济于事.

必须有一个简单的方法来做到这一点.


以下答案很棒.但为了使这更复杂 - 我并不总是想使用我的测试目录中列出的目录.有时我想将目录名称作为命令行参数传递.

我接受了查尔斯关于设置IFS的建议,并提出了以下建议:

dirlist="${@}"
(
  [[ -z "$dirlist" ]] && dirlist=`find test -mindepth 1 -type d` && IFS=$'\n'
  for …
Run Code Online (Sandbox Code Playgroud)

bash whitespace loops

117
推荐指数
5
解决办法
12万
查看次数

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

假设我有一个文件列表

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",所以我需要在进程中置换文件名.

bash shell command-line

4
推荐指数
1
解决办法
2864
查看次数

标签 统计

bash ×2

command-line ×1

loops ×1

shell ×1

whitespace ×1