Bash Applescript不执行shell命令

Bash Applescript不执行shell命令,bash,macos,applescript,echo,Bash,Macos,Applescript,Echo,我有一本苹果书 do shell script "echo -n -e \\\\x61\\\\x61\\\\x61 > /tmp/file.txt" 但是file.txt不包含“aaa” 它包含“-n-e aaa\n” 有人能帮我解决这个问题吗?不同版本的echo在解释命令选项(如-n和-e)和/或字符串中的转义序列时完全不一致。这不仅仅是像cdarke所说的bash vs.sh;比那更混乱。最好的办法是使用printf来避免任何一种情况。它的使用比echo要复杂一些,但完全值得,因为您

我有一本苹果书

do shell script "echo -n -e \\\\x61\\\\x61\\\\x61 > /tmp/file.txt"
但是file.txt不包含“aaa”

它包含“-n-e aaa\n”


有人能帮我解决这个问题吗?

不同版本的
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解释的。但至少它们不需要再翻两番了。)


(另请注意)

不同版本的
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解释的。但至少它们不需要再翻两番了。)


(另请注意)

sh
echo不支持-n或-e选项,它们是bash扩展。尝试在命令前面加上
bash-c
,或者查看您的系统是否支持
printf
。祝你好运。
sh
echo不支持-n或-e选项,它们是bash扩展。尝试在命令前面加上
bash-c
,或者查看您的系统是否支持
printf
。祝你好运。加上一个“相关xkcd”。四年后链接仍然很好。加上一个“相关xkcd”。四年后链接仍然良好。