安装 Gazebo 时 sed 's:\\ ::g' 似乎无法正常工作

安装 Gazebo 时 sed 's:\\ ::g' 似乎无法正常工作

我正在尝试在 Ubuntu 17.04 上编译 Gazebo。

我正在关注这个指示,但以下似乎是一个错误:

sudo apt-get install $(sed 's:\\ ::g' <<< $BASE_DEPENDENCIES) $(sed 's:\\ ::g' <<< $GAZEBO_BASE_DEPENDENCIES)

我不明白这里在做什么:sed 's:\\ ::g'

当我运行上一个命令时,sudo apt-get install ...出现以下错误 42 次:

E: 无法找到包\

我已经回应了这两个变量。

echo $BASE_DEPENDENCIES
build-essential \ cmake \ debhelper \ mesa-utils \ cppcheck \ xsltproc \ python-psutil \ python \ bc \ netcat-openbsd \ gnupg2 \ net-tools \ locales

另一个:

echo $GAZEBO_BASE_DEPENDENCIES
libfreeimage-dev \ libprotoc-dev \ libprotobuf-dev \ protobuf-compiler \ freeglut3-dev \ libcurl4-openssl-dev \ libtinyxml-dev \ libtar-dev \ libtbb-dev \ libogre-1.9-dev \ libxml2-dev \ pkg-config \ qtbase5-dev \ libqwt-qt5-dev \ libltdl-dev \ libgts-dev \ libboost-thread-dev \ libboost-signals-dev \ libboost-system-dev \ libboost-filesystem-dev \ libboost-program-options-dev \ libboost-regex-dev \ libboost-iostreams-dev \ libbullet-dev \ libsimbody-dev \ \ libignition-transport3-dev \ libignition-math3-dev \ libignition-msgs-dev \ libtinyxml2-dev \ libsdformat5-dev

该命令的输出sed 's:\\ ::g' <<< $BASE_DEPENDENCIES是:

build-essential \
                   cmake           \
                   debhelper       \
                   mesa-utils      \
                   cppcheck        \
                   xsltproc        \
                   python-psutil   \
                   python          \
                   bc              \
                   netcat-openbsd  \
                   gnupg2          \
                   net-tools       \
                   locales

更新
sed 's:\\[[:space:]]::g' <<< $BASE_DEPENDENCIES我已尝试使用以下输出的 命令:

user@Mpc:~$ sed 's:\\[[:space:]]::g' <<< $BASE_DEPENDENCIES
build-essential \
                   cmake           \
                   debhelper       \
                   mesa-utils      \
                   cppcheck        \
                   xsltproc        \
                   python-psutil   \
                   python          \
                   bc              \
                   netcat-openbsd  \
                   gnupg2          \
                   net-tools       \
                   locales

更新2
看来sed命令是可以的。如果我执行以下操作,而不使用环境变量,我会得到正确的字符串:

user@pc:~$ echo 'build-essential \ cmake \ debhelper \ mesa-utils \ cppcheck \ xsltproc \ python-psutil \ python \ bc \ netcat-openbsd \ gnupg2 \ net-tools \ locales' | sed 's:\\ ::g'
build-essential cmake debhelper mesa-utils cppcheck xsltproc python-psutil python bc netcat-openbsd gnupg2 net-tools locales

更新3
如果我包围环境。变量。并回应我得到换行符和空格。但如果我在不加引号的情况下回应它们,我就会把所有内容都写在一行中。

如果我将 sed 与 env.不带引号的 var 我得到带有新行和空格的变量值。

我该如何修复这个错误?

答案1

sed命令应该从变量内容中删除所有反斜杠,但它希望反斜杠后面跟着空格。但似乎它们后面跟着换行符,所以使用

sed -z 's:\\[[:space:]]::g'

相反(这仅适用于 GNU sed,但因为您使用的是 Ubuntu ...)。

相关内容