我正在尝试执行以下操作:
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标志的字符串?
答案 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 }}