Variables 比较Applescript错误中的变量?

Variables 比较Applescript错误中的变量?,variables,applescript,Variables,Applescript,我有一个程序,检查选定位置的文件数量,然后显示它们。但是,当我试图将它合并到另一个程序中时,它出现了错误。最初它是有效的,但现在它说的是真是假 set variable1 to do shell script "cd /Volumes; ls | wc -l" display dialog variable1 这是最初的程序,它告诉我卷文件夹中的文件量是3 set variable1 to do shell script "cd /Volumes; ls | wc -l" variable1

我有一个程序,检查选定位置的文件数量,然后显示它们。但是,当我试图将它合并到另一个程序中时,它出现了错误。最初它是有效的,但现在它说的是真是假

set variable1 to do shell script "cd /Volumes; ls | wc -l"
display dialog variable1
这是最初的程序,它告诉我卷文件夹中的文件量是3

set variable1 to do shell script "cd /Volumes; ls | wc -l"
variable1 = 3
但后来我试图把它纳入我的新程序,它告诉我这是错误的


如果可以的话,请帮助我,因为这让人非常沮丧。任何帮助都很好,请提前感谢!:)

像AppleScript这样的语言对数据类型(即数据如何表示的机制,而不是它的实际含义)愚蠢地迂腐。
do shell script
命令返回类型为
text
(又称
string
Unicode text
)的值,但第二行将其与类型为
integer
的值进行比较:

"3" = 3
在一个理智、人道的世界里,这种比较将返回
真值
,因为你的意思是显而易见的。唉,编程世界远非理性,也很少有人情味,需要一定程度的迂腐,这会让大多数人陷入早期的沮丧。在这种情况下,在尝试比较这两个值之前,必须确保它们是相同(或等效)类型。例如,如果要执行数字比较:

set variable1 to (do shell script "cd /Volumes; ls | wc -l") as integer
variable1 = 3
AppleScript在这里更容易混淆,因为有时它会自动执行转换(强制),而有时它不会,在这种情况下,您必须使用它的
at
运算符自己显式转换(强制转换)值

哦,AppleScript执行数值比较的规则与执行文本比较的规则不同,因此即使在它将“有益地”强制您使用值的情况下,您也需要对正在使用的值的类型保持额外的警惕,否则,您很容易被更狡猾、更令人困惑的bug发现

例如:

34 > 5 --> true
第一次测试返回的
true
与预期一致,因为数字34大于数字5

"34" > "5" --> false (?)
文本比较逐字符比较两个文本值,因此第二个测试返回
false
,因为“3”在“5”之前,而不是之后


此外,与之不同的是,它是相等的(
=
)和不相等的(
)操作符,
可能更糟,您可能在Windows CMD.EXE中,谢谢您的回复。现在看起来很明显,但我可能永远也不会明白。再次感谢您的帮助!:)
34 > "5" --> true

"34" > 5 --> false
(variable1 as number) > 5

(variable1 as text) > "5"