在bash脚本中转义空格

Escape spaces in bash script

本问题已经有最佳答案,请猛点这里访问。

每当我正在迭代的目录中的文件包含使用grep的字符串时,我都在尝试在bash脚本中执行一些操作。问题出在目录中的一个子集包含名称中的空格。因此,我试着用sed替换已有的逃逸空间:

1
2
3
if grep -c"main" ${source} | sed 's/ /\\ /g'; then
  # do something
fi

但是,我仍然得到错误:

grep: /Users/me/Desktop/theDir/nameWith: No such file or directory

grep: spaces.txt: No such file or directory

我做错什么了?


您应该引用被grep'ed的文件名:

1
2
3
if grep -c main"$source" ; then
  # do something
fi

…假设$source是文件名。如果$source是一个目录的名称,我将需要更多关于您尝试做什么的信息。