下面这个脚本将创建一个名为“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/

10-11 23:22
查看更多