我想将一个可能包含空格的路径传递到su -c
脚本中的.sh
命令中:
su -c "xdg-desktop-menu install ${DesktopFile}" -m "${Username}"
$ DesktopFile是我需要转义的路径。我在'
内""
尝试了许多变体,\"
和几个大括号,但我没有提出解决方案。有趣的是,xdg-desktop-icon工作正常,但xdg-desktop-menu在空白处死掉。有什么建议吗?
答案 0 :(得分:0)
如果您正在使用bash,则printf '%q'
可用于在引用不足时转义特殊字符。
su -c "xdg-desktop-menu install $(printf '%q' "$DesktopFile") -m $(printf '%q' "$Username")"
请注意$(printf...)
不需要引号,但"$DesktopFile"
会引用。该变量需要安全地传递给printf
,因此必须引用它。 printf '%q'
的输出保证不受单词分裂和通配的影响,因此它不需要引号。 (虽然,如果你想引用它,你可以。它在任何一方都需要\"
。)
答案 1 :(得分:0)
我无法弄清楚这是否是xdg-desktop-menu中的错误,因为它适用于xdg-desktop-icon,但是我现在正在使用一种解决方法:
cd "$PathWithSpaces"
su -c "xdg-desktop-menu install $DesktopFilenameWithoutSpaces" -m "$Username"
PathWithSpaces
包含DesktopFilenameWithoutSpaces
,似乎可靠地运作。