" echo -e"不在su -c命令

时间:2016-09-16 15:10:50

标签: linux bash shell scripting

我正在尝试执行以下操作:

su username -c "echo -e "test 1""

当我这样做时,它输出:

-e test

如果我试试这个:

su username -c "echo -e 'test 1'"

输出:

-e test 1

试过这个:

su username -c 'echo -e "test 1"'

输出:

-e test 1

如何让它工作,以便输出不带-e escape标志的字符串?

1 个答案:

答案 0 :(得分:2)

首先,您的报价没有按照您希望的方式嵌套。解决这个问题可能如下:

su username -c 'echo -e "test 1"'

...或...

su username -c "echo -e \"test 1\""

如果你想保证子shell是bash(默认情况下支持echo -e),请考虑:

su username -c 'bash -s' <<'EOF'
echo -e "test 1"
EOF

其次,无法保证echo将提供-e选项(在符合the relevant standard的回音中,echo -e将在其输出上打印-e,因此您的代码不应该依赖于这样的参数。

相当于bash echo -e的POSIX(启用时,并非总是如此)是printf '%b'

su username -c "printf '%b\n' 'test 1'"

...如果您实际上不想要-e的行为(在内容中插入反斜杠转义,而不是仅在格式字符串中),请使用%s而不是{{1 }}