我有一个AppleScript
do shell script "echo -n -e \\\\x61\\\\x61\\\\x61 > /tmp/file.txt"
但是file.txt不包含" aaa"!
它包含" -n -eaa \ n"代替。
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
echo
的不同版本在解释命令选项(如-n
和-e
)和/或字符串中的转义序列方面无可救药地不一致。 cdarke说,这不仅仅是bash vs. sh;它比那更麻烦。最好的办法就是使用printf
来避免任何一个。它比echo
使用起来有点复杂,但完全值得,因为你的脚本不会因为最新版本的shell使用不同的选项(!)编译而中断。
在这种情况下,使用printf
实际上甚至比使用echo
更简单,因为它总是解释转义序列(在第一个参数中,“格式字符串” - 其余部分不同),并且不会在最后打印换行符(除非您在格式字符串的末尾用\n
明确告诉它)。所以你的脚本变成了:
do shell script "printf \\\\x61\\\\x61\\\\x61 > /tmp/file.txt"
...虽然您可以通过使用单引号来进一步简化它,以防止shell在转到printf
之前解释转义:
do shell script "printf '\\x61\\x61\\x61' > /tmp/file.txt"
(转义仍然加倍,因为它们被AppleScript解释。但至少它们不需要再翻两番了。)
(p。relevant xkcd)