标签: test

Bash 否定 -a(文件存在)不会改变结果,而 for ! -e 改变结果

我很困惑,但仍然猜想我以某种方式误解了 Bash。

/$ if [   -e /bin/grep ]; then echo yea; else echo nay ; fi
yea
/$ if [ ! -e /bin/grep ]; then echo yea; else echo nay ; fi
nay
/$ if [   -a /bin/grep ]; then echo yea; else echo nay ; fi
yea
/$ if [ ! -a /bin/grep ]; then echo yea; else echo nay ; fi
yea
Run Code Online (Sandbox Code Playgroud)

为什么否定!会逆转测试的效果-e而不是-a测试?

男人巴什 说:

测试

3 个参数

以下条件按列出的顺序应用。

  1. 如果第二个参数是上面条件表达式下列出的二进制条件运算符之一,则表达式的结果是使用第一个和第三个参数作为操作数的二进制测试的结果。当存在三个参数时,-a …

bash test

16
推荐指数
2
解决办法
3279
查看次数

`test` 和 `[` - 不同的二进制文件,有什么区别吗?

我在回答另一个问题时注意到test[是不同的二进制文件,但[联机帮助页会显示test's. 除了对结局的要求],还有什么区别吗?如果不是,为什么它们分开二进制文件而不是符号链接?(它们也是bash内置bash函数,也没有区别。)

linux command-line utilities coreutils test

15
推荐指数
2
解决办法
715
查看次数

Bash - 预期的整数表达式

我正在检查我的主题的更新脚本

我有 2 个文本文件。第一个称为“current.txt”并包含当前版本。4.1.1该文本文件中有字符串。

第二个称为“latest.txt”并包含最新版本。4.2此文本文件中有字符串。

所以这是代码

echo "Checking update";
x=$(cat ./current.txt)
y=$(cat ./latest.txt)
if [ "$x" -eq "$y" ]
then
       echo There is version $y update
else
       echo Version $x is the latest version
fi
Run Code Online (Sandbox Code Playgroud)

这意味着如果 current.txt 与 latest.txt 不同,那么它会说“有 4.2 版更新”。如果不是,它会说“版本 4.1.1 是最新版本”

但是当我尝试运行它时。我收到这个错误

Checking update
./test.sh: line 4: [: 4.1.1: integer expression expected
Version 4.1.1 is the latest version
Run Code Online (Sandbox Code Playgroud)

那么我做错了什么?

string shell-script test numeric-data

15
推荐指数
2
解决办法
7万
查看次数

[ -t 1 ] 检查什么?

zsh当我bash在 Windows 上启动时,我刚刚找到了一种启动方式

https://www.howtogeek.com/258518/how-to-use-zsh-or-another-shell-in-windows-10/

建议在.bashrc.

# Launch Zsh
if [ -t 1 ]; then
exec zsh
fi
Run Code Online (Sandbox Code Playgroud)

什么[ -t 1 ]意思?

这是真的吗?

那么,我可以这样做吗?

exec zsh
Run Code Online (Sandbox Code Playgroud)

shell bash zsh test

15
推荐指数
3
解决办法
6718
查看次数

bash:我打破了 [[ < ]]

我正在编写一个 bash 脚本,突然这种行为开始了:

[[ 1 < 2 ]]; echo $?  # outputs 0
[[ 2 < 13 ]]; echo $? # outputs 1
Run Code Online (Sandbox Code Playgroud)

-lt运行良好:

[[ 1 -lt 2 ]]; echo $?  # outputs 0
[[ 2 -lt 13 ]]; echo $? # outputs 0
Run Code Online (Sandbox Code Playgroud)

我不小心<以某种方式覆盖了吗?

这是我编写的用于测试此行为的脚本:

#!/bin/bash

for a in {1..5}
do
    for b in {1..20}
    do
        [[ $a < $b ]] && echo $a $b
    done

    echo
done
Run Code Online (Sandbox Code Playgroud)

这是输出:

1 2
1 3
1 4 …
Run Code Online (Sandbox Code Playgroud)

bash test

14
推荐指数
2
解决办法
2633
查看次数

如何使用 ZSH 测试文件是否不存在?

这个问题是关于 ZSH,而不是 bash。

我的.zshrc文件中有以下几行。每当我打开一个终端时,我都会收到一个no matches found错误,引用带有if语句的行。

if [[!( -a ~/.zkbd/$TERM-${${DISPLAY:t}:-$VENDOR-$OSTYPE} )]]; then
    zkbd
fi
Run Code Online (Sandbox Code Playgroud)

我通读了 ZSH 文档,我的if陈述似乎是正确的。我不明白为什么我收到错误。

zkbd如果文件.zkbd夹中的文件不存在,我想要发生的是让实用程序运行。

zsh test

13
推荐指数
1
解决办法
2万
查看次数

直接在bash中打印条件结果而不使用if

假设我有这个简单的代码:

echo "Are there any arguments?"
if [ $# -eq 0 ]; then
    echo "false"
else
    echo "true"
fi
Run Code Online (Sandbox Code Playgroud)

如您所见,最好有机会直接打印条件结果,但我不知道该怎么做。

它会是这样的:

echo "$([ $# -eq 0 ])"

但它不是那样工作的。我们可以在没有的情况下做到这一点if吗?

shell bash test

13
推荐指数
2
解决办法
2万
查看次数

为什么 `==` 在 zsh 和 bash 中的 `[ ... ]` 中表现不同?

在执行此操作时,我得到了预期的结果bash

[ "a" == "a" ] && echo yes
Run Code Online (Sandbox Code Playgroud)

它给了我yes

但是当我在 中执行此操作时zsh,我得到以下信息:

zsh: = not found
Run Code Online (Sandbox Code Playgroud)

为什么相同的命令 ( /usr/bin/[) 在不同的 shell 中表现不同?

bash zsh test

13
推荐指数
1
解决办法
5305
查看次数

[[ 和 bash 中的大小写等效

if [[ "$1" = pattern ]]; then
    hook
fi
Run Code Online (Sandbox Code Playgroud)

总是表现得一样

case "$1" in
    pattern) hook;;
esac
Run Code Online (Sandbox Code Playgroud)

或者有什么问题吗?

bash wildcards test

13
推荐指数
1
解决办法
910
查看次数

bash 的条件表达式中 -a 和 -e 的区别是什么?

来自man bash

CONDITIONAL EXPRESSIONS
[...]
       -a file
              True if file exists.
[...]
       -e file
              True if file exists.
Run Code Online (Sandbox Code Playgroud)
  1. 那么[ -a $FILE ]和之间有什么区别[ -e $FILE ],如果有的话?
  2. 如果没有真正的区别,为什么存在两个用于相同目的的标志?

shell bash test

12
推荐指数
3
解决办法
2173
查看次数