下面这个脚本将创建一个名为“Happy”的文件,我不知道为什么,有人可以试试这个脚本并告诉我发生了什么吗?
谢谢!
#!/bin/bash
str1=""
str2="Sad"
str3="Happy"
if [ "$str2">"$str3" ]
then echo "$str2 is greater than $str3"
elif [ "$str2"<"$str3" ]
then echo "$str2 is less than $str3"
fi
最佳答案
[
只是test
命令的一个(愚蠢的)别名;它后面的所有内容(包括强制关闭]
)都是一个参数。(您的待遇与if test "$str2">"$str3"
相同)
有两个问题:
操作数和运算符需要用空格分隔。
# still not quite right, but ...
if [ "$str2" > "$str3" ]
由于shell将
>
和<
解释为重定向运算符,因此必须对它们进行转义,以便将它们作为参数传递给[
。if [ "$str2 \> "$str3" ]
(您可能认为仅转义运算符就足够了;但是,
"$str2"\>"$str3"
将被视为test
的单个字符串参数,而不是将test
解释为表达式的三个单独参数。test "$str2"\>"$str3"
只需检查单个参数是否为空。)因为您使用的是
bash
,所以使用[[
而不是[
要简单得多。[[
不是常规命令;它是bash
识别的特殊语法,因此不应用常规处理规则。这里最相关的是>
是字符串比较运算符,而不是重定向运算符,因此不需要转义。 if [[ $str2 > $str3 ]]
关于bash - Bash脚本创建了一个不应包含的文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45640857/