我试图将带有空格的变量传递给使用BASH的sed,并且在提示符下,它可以正常工作:
$ tmp=/folder1/This Folder Here/randomfile.abc
$ echo "$tmp" | sed -e 's/ /\\ /g'
/folder1/This\ Folder\ Here/randomfile.abc
但是一旦我将它传递给变量,sed就不再用反斜杠替换空格:
$ tmp=/folder1/This Folder Here/randomfile.abc
$ location=`echo "$tmp" | sed -e 's/ /\\ /g'`
$ echo $location
/folder1/This Folder Here/randomfile.abc
我希望第二双眼睛可以接受我不能做的事情。
答案 0 :(得分:5)
你需要几对反斜杠:
sed -e 's/ /\\\\ /g'
您似乎想引用输入以便将其用作shell输入。无需使用sed
。您可以使用printf
:
$ foo="a string with spaces"
$ printf "%q" "$foo"
a\ string\ with\ spaces
答案 1 :(得分:3)
您需要使用更多引用。
tmp="/folder1/This Folder Here/randomfile.abc"
location="$(echo "$tmp" | sed -e 's/ /\\ /g')"
echo "$location"
还有一个纯bash
解决方案来插入反斜杠:
tmp="/folder1/This Folder Here/randomfile.abc"
echo "${tmp// /\\ }"
答案 2 :(得分:3)
在分配期间,bash正在评估引号。您可以通过引用来解决这个问题:
location="$(echo "$tmp" | sed -e 's/ /\\ /g')"
或devnull的答案(双引号)
或者切换到zsh以使这样的事情更容易
% echo $tmp
/folder1/This Folder Here/randomfile.abc
% echo ${(q)tmp}
/folder1/This\ Folder\ Here/randomfile.abc