Bash 参考手册提到了以下关于test/[命令的内容:
\n\n1 个参数
\n当且仅当参数不为空时,表达式才为 true。
\n
到目前为止,一切都很好:
\n$ test "foo"\n$ echo $?\n0\n\n$ test foo\n$ echo $?\n0\n\n$ test ""\n$ echo $?\n1\n\n$ SET_VARIABLE="hello"\n$ test $SET_VARIABLE\n$ echo $?\n0\n\n$ unset UNSET_VARIABLE\n$ test $UNSET_VARIABLE\n$ echo $?\n1\n\n$ NULL_VARIABLE=\n$ test $NULL_VARIABLE\n$ echo $?\n1\nRun Code Online (Sandbox Code Playgroud)\n但是,手册提到了以下三个论点:
\n\n\n3 个参数
\n...
\n如果第一个参数恰好是 \xe2\x80\x98(\xe2\x80\x99 并且第三个参数恰好是 \xe2\x80\x98)\xe2\x80\x99,则结果是第二个参数的单参数测试争论。
\n
我找不到这个三参数案例的任何有效示例;任何尝试都会导致语法错误:
\n$ test ( "foo" )\nbash: syntax error near unexpected token `"foo"\'\n$ echo $?\n2\n\n$ test ( foo )\nbash: syntax error near unexpected token `foo\'\n$ echo $?\n2\n\n$ test ( "" )\nbash: syntax error near unexpected token `""\'\n$ echo $?\n2\nRun Code Online (Sandbox Code Playgroud)\n相应的 4 参数情况也会发生相同的语法错误:test ( -d /boot )因语法错误而失败,而 2 参数表达式test -d /boot工作正常。
我的bash版本是5.1.4(1)-release,并在末尾man bash声明GNU Bash 5.1 ,并且联机帮助页提到了有问题的语法。
\ 的括号语法的工作示例是什么test?该语法可以用来做什么?
您对 的三参数用法是正确的test,但是(,)是 bash 中的保留字,表示在子 shell 上下文中运行内部提供的命令。当尝试与 一起使用时,您需要剥夺其特殊含义test
$ touch foo
$ test \( -f foo \)
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
如果您使用 bash 并且不担心可移植性,那么更喜欢[[旧版[内置。有关两者之间差异的更多见解,请参阅BashFAQ/031 -和之间的区别是什么?test\[\[\[
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |