使用Ubuntu12.04中的终端无法理解bash中的脚本

使用Ubuntu12.04中的终端无法理解bash中的脚本,bash,Bash,有人能告诉我在.sh文件中找到此脚本意味着什么吗: [ ! -n "$T_R" ] && echo "Message Appear" && exit 1; 链式的&&是一种常见的短路习惯用法 而不是写作 if true; then if true; then echo moo fi fi 您可以缩写为justtrue&&true&&echo-moo echo通常会成功,因此true&&echo moo&&exit 1将执行echo和exit如果

有人能告诉我在
.sh
文件中找到此脚本意味着什么吗:

[ ! -n "$T_R" ] && echo "Message Appear" && exit 1;

链式的
&&
是一种常见的短路习惯用法

而不是写作

if true; then
  if true; then
    echo moo
  fi
fi
您可以缩写为just
true&&true&&echo-moo

echo
通常会成功,因此
true&&echo moo&&exit 1
将执行
echo
exit
如果
true
成功(显然它总是会成功)

(可能有一些极端的情况下,
echo
可能会失败,但如果发生这种情况,无论如何你都会感到厌烦,所以我认为试图防范这些情况是没有意义的。)

[
test
的别名,它是shell脚本的通用比较助手(在Bash中,它甚至是内置的)。
test-n
检查字符串是否为非空

是通用的否定运算符,因此它将测试转换为检查空字符串


(这有点不自然,因为有一个单独的
test-z“$T_R”
,专门检查字符串是否为空。)

链式
&&
是一种常见的短路习惯用法

而不是写作

if true; then
  if true; then
    echo moo
  fi
fi
您可以缩写为just
true&&true&&echo-moo

echo
通常会成功,因此
true&&echo moo&&exit 1
将执行
echo
exit
如果
true
成功(显然它总是会成功)

(可能有一些极端的情况下,
echo
可能会失败,但如果发生这种情况,无论如何你都会感到厌烦,所以我认为试图防范这些情况是没有意义的。)

[
test
的别名,它是shell脚本的通用比较助手(在Bash中,它甚至是内置的)。
test-n
检查字符串是否为非空

是通用的否定运算符,因此它将测试转换为检查空字符串


(这有点不自然,因为有一个单独的
test-z“$T_R”
,专门检查字符串是否为空。)

链式
&&
是一种常见的短路习惯用法

而不是写作

if true; then
  if true; then
    echo moo
  fi
fi
您可以缩写为just
true&&true&&echo-moo

echo
通常会成功,因此
true&&echo moo&&exit 1
将执行
echo
exit
如果
true
成功(显然它总是会成功)

(可能有一些极端的情况下,
echo
可能会失败,但如果发生这种情况,无论如何你都会感到厌烦,所以我认为试图防范这些情况是没有意义的。)

[
test
的别名,它是shell脚本的通用比较助手(在Bash中,它甚至是内置的)。
test-n
检查字符串是否为非空

是通用的否定运算符,因此它将测试转换为检查空字符串


(这有点不自然,因为有一个单独的
test-z“$T_R”
,专门检查字符串是否为空。)

链式
&&
是一种常见的短路习惯用法

而不是写作

if true; then
  if true; then
    echo moo
  fi
fi
您可以缩写为just
true&&true&&echo-moo

echo
通常会成功,因此
true&&echo moo&&exit 1
将执行
echo
exit
如果
true
成功(显然它总是会成功)

(可能有一些极端的情况下,
echo
可能会失败,但如果发生这种情况,无论如何你都会感到厌烦,所以我认为试图防范这些情况是没有意义的。)

[
test
的别名,它是shell脚本的通用比较助手(在Bash中,它甚至是内置的)。
test-n
检查字符串是否为非空

是通用的否定运算符,因此它将测试转换为检查空字符串


(这有点不自然,因为有一个单独的
测试-z“$T_R”
,专门检查字符串是否为空。)

编辑:更正tripleee指出的错误信息

括号
[]
是“test”的别名,用于测试是否满足某个条件。这并不是为了使问题复杂化,但请注意,这与bash shell关键字
[[]]
是分离的(感谢tripleee的澄清!)。现在,大多数人似乎都使用后者,因为它具有更强大的功能集

在括号之间,脚本正在测试以确定变量
“$T\R”
是否为空字符串

  • 如果作为参数传递给它的字符串长度为非空,则
    -n
    运算符返回true
  • 反转案例(如果结果不正确,则测试成功) true)。因此在本例中,如果 字符串变量
    “$T\u R”
    为**非零**(即如果 变量是空字符串或不存在)
双符号,
&&
运算符意味着仅在成功的情况下执行后续代码,因此只有在测试成功的情况下才会回显消息“message Display”(再次,如果
“$T_R”
为空或未设置)

最后,
&&exit 1
表示在成功回显消息后退出返回状态1


bash
test
手册页对所有这些主题都非常有帮助,应查阅更多详细信息。

编辑:纠正tripleee指出的错误信息

括号
[]
是“test”的别名,用于测试