0

在我正在编写的一段脚本中,我将路径列表输出到一个临时文本文件中,以便稍后与 cd 一起使用。我正在使用 sed 将目录名称中的空格替换为 '\ ',这样我还可以使脚本使用目录名称中的空格。我的命令如下: cat temp.txt | sed 's/ /\\ /g' 这具有用 '\ ' 替换空格的所需输出,但是当我稍后尝试 cd 时,它会忽略第二个单词并说 example\ 不存在。任何想法如何解决这一问题?

如果你想看的话,我的整个脚本都在 pastebin 上:http: //pastebin.com/6jmnKDAd

这是我添加 sed 之前的备份

4

4 回答 4

3

尝试将您的变量包含在“”中而不转义空格。

cd "$mydir"
于 2013-01-04T15:14:22.477 回答
3

为了补充 Lorenzo 的回答,如果文件中有一堆换行符分隔的路径名:

while IFS= read -r path; do
    cd "$path"
    do stuff
done < temp.txt

引用"$path"是防止shell分词的关键

于 2013-01-04T15:27:32.353 回答
0

是否需要使用临时文件,或者您可以将目录存储在数组中:

dirs=()
dirs+=("/tmp/file A.txt")
dirs+=("/tmp/file B.txt")

for d in "${dirs[@]}"; do
  cd "$d"
done

资源

于 2013-01-04T15:38:58.477 回答
0

你需要这样做而不是cat temp.txt | sed 's/ /\\ /g'

perl -F"/" -ane 'foreach (@F){if(/ /){$_="\"".$_."\"";}}print join "/",@F;' temp.txt

也检查这里

于 2013-01-04T15:36:05.847 回答