gpt4 book ai didi

linux - 带有算术和测试的 Bash 复合表达式

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:31 25 4
gpt4 key购买 nike

我正在尝试在 Bash 中编写一个复合表达式,它使用算术括号 (( )) 中的一个表达式和测试 [ ] 中的另一个表达式。这是我的:

if (( ${#INPUT_FILES[@]} > 1 )) -a [ -n "$OUTPUT_FILE" ]; then

但是我得到了错误

./backup.sh: line 51: syntax error near unexpected token `-a'
./backup.sh: line 51: `if (( ${#INPUT_FILES[@]} > 1 )) -a [ -n "$OUTPUT_FILE" ]; then'

INPUT_FILES 是一个字符串数组,OUTPUT_FILE 是一个常规字符串变量。

我如何在逻辑上将这两个表达式组合在一起?

最佳答案

-a 标志是 test 表达式语法本身的一部分。在括号之外,您必须使用 && 及其同类。

if (( ${#INPUT_FILES[@]} > 1 )) && [ -n "$OUTPUT_FILE" ]; then

如果你一心想要使用-a,你可以这样写:

if [ ${#INPUT_FILES[@]} -gt 1 -a -n "$OUTPUT_FILE" ]; then

但正如 Adrian Frühwirth 在他的评论中指出的那样,-a-o 标志 are obsolescent in XSI , 所以你应该更喜欢 &&||.

关于linux - 带有算术和测试的 Bash 复合表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22493917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com