似乎你可以写一个否定的条件
if ! [[ ... ]]; then
Run Code Online (Sandbox Code Playgroud)
要么
if [[ ! ... ]]; then
Run Code Online (Sandbox Code Playgroud)
是否有理由选择一种或另一种方法,假设操作的语义相同?(即,显然,在第二个版本中,如果...是复合语句并且您不小心将表达式正确分组,那么您最终可能只会否定表达式的第一部分.)
我已经看到了类似的东西
if ! some-command; then
#do something
fi
Run Code Online (Sandbox Code Playgroud)
感叹号有什么影响?我看到如果你使用括号,它可以用于否定.
这是同样的效果吗?
我有一个目录.它是空的.如果我执行ls -lrt,则显示总计0
仅当目录为空时,如何指定If条件才能执行某些操作.
我的意思是问如何捕获0值.
我了解到 -r 表示递归,这意味着该命令可以在所有子目录中执行。为了确保我理解,我写了下面的两个函数来进行一些测试。我编写以下代码的文件名为 test.sh。在同一个目录中,我有一个名为 subtest 的子目录。在当前目录或子目录中有一个名为 xx.sh 的文件。
#!/bin/bash
function aa {
if [ ! -r $1 ]
then
echo "not exist"
else
echo "exist"
fi
}
function bb {
if [ -r $1 ]
then
echo "exist"
else
echo "not exist"
fi
}
aa xx.sh / bb xx.sh
Run Code Online (Sandbox Code Playgroud)
我发现的结果:
对于 aa 函数,-r如果 xx.sh 在当前目录中,它只会打印“exist”。它不会在子目录中查找 xx.sh。没有-r,当 xx.sh 在当前目录或子目录中时,它将打印“存在”。
对于 bb 函数,使用-r,它只会在当前目录有 xx.sh 时打印“exist”。没有-r,它总是会打印“存在”,即使根本没有 xx.sh (这让我感到惊讶并且没有意义!)。
谁能解释为什么会发生上述结果以及 -r 究竟做了什么?