相关疑难解决方法(0)

在Bash中测试非零长度字符串:[ - n"$ var"]或["$ var"]

我已经看到bash脚本以两种不同的方式测试非零长度字符串.大多数脚本使用-n选项:

#!/bin/bash
# With the -n option
if [ -n "$var" ]; then
  # Do something when var is non-zero length
fi
Run Code Online (Sandbox Code Playgroud)

但是-n选项并不是真正需要的:

# Without the -n option
if [ "$var" ]; then
  # Do something when var is non-zero length
fi
Run Code Online (Sandbox Code Playgroud)

哪种方式更好?

同样,这是测试零长度的更好方法:

if [ -z "$var" ]; then
  # Do something when var is zero-length
fi
Run Code Online (Sandbox Code Playgroud)

要么

if [ ! "$var" ]; then
  # Do something when var is zero-length
fi
Run Code Online (Sandbox Code Playgroud)

syntax bash shell if-statement

160
推荐指数
4
解决办法
12万
查看次数

bash是否支持单词边界正则表达式?

我试图匹配列表中的单词的存在,然后再次添加该单词(以避免重复).我正在使用bash 4.2.24并尝试以下方法:

[[  $foo =~ \bmyword\b ]]
Run Code Online (Sandbox Code Playgroud)

[[  $foo =~ \<myword\> ]]
Run Code Online (Sandbox Code Playgroud)

但是,似乎都不起作用.它们在bash docs示例中提到:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_04_01.html.

我认为我做错了什么,但我不确定是什么.

regex bash

27
推荐指数
4
解决办法
1万
查看次数

在测试命令之前/之后否定之间有区别吗?

我已经使用Bash脚本了一段时间,我想知道这两种形式的否定与test命令之间是否有任何区别:

if [ ! condition ]; then
fi

if ! [ condition ]; then
fi
Run Code Online (Sandbox Code Playgroud)

第一个告诉shell传递参数! condition进行测试,让程序自己处理否定.另一方面,第二个传递condition给测试并让shell本身否定错误代码.

在这两种形式之间进行选择时,我应该注意哪些陷阱?什么样的价值$condition可以使他们之间的结果不同?

(我似乎记得刚刚在讨论这篇文章时读过一篇文章,但我不记得如何找到它/正是所讨论的内容.)

unix linux bash shell terminal

11
推荐指数
1
解决办法
418
查看次数

如何在bash脚本中组合AND和OR条件用于if条件?

我试图在if条件下的bash脚本中组合逻辑AND&OR.不知何故,我没有得到所需的输出,很难排除故障.我试图验证传递给shell脚本的输入参数没有参数,并且传递的第一个参数是否有效.

if [ "$#" -ne 1 ] && ([ "$1" == "ABC" ] || [ "$1" == "DEF" ] || [ "$1" == "GHI" ] || [ "$1" == "JKL" ]) 
then
echo "Usage: ./myscript.sh [ABC | DEF | GHI | JKL]"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)

谁能指出这里出了什么问题?

unix bash if-statement

4
推荐指数
2
解决办法
5403
查看次数

测试字符串是否包含文字星号

基本上寻找一个包含星号的字符串,四处寻找一个与直到循环相关的字符串,但无济于事!

例如,用户基本上会继续键入字符串,程序将拒绝它们,直到弹出一个带星号的字符串.

然后在这一点上它会回复一条消息[不能详细说明抱歉]

码:

until [ "string" == "[asteriskstuff]" ]
do

  echo "just give me a string with an asterisk for crying out loud"

  read "string"

done
Run Code Online (Sandbox Code Playgroud)

当用户停止输入hi然后决定输入hi*它将显示回声消息基本上我只想绕过bleedin'星号因为[asteriskstuff]是我总是动摇的区域!

所有帮助赞赏!

摘要:如何以直接循环的简单方式绕过星号?

unix string bash loops

4
推荐指数
1
解决办法
1363
查看次数

如果我使用'echo',为什么会这样呢?

所以我目前只是试图遍历我当前的目录,在那里我调用以下bash脚本,每次找到一个打印出来的'我们找到了一个.c文件'.我有一个if语句来检查args,因为我将扩展脚本,如果没有找到args它将继续运行,并且一个arg将告诉脚本要查看的目录.

问题是,此代码不起作用:

if [ -z "$#" ]
    then
        for i in *.c; do
            echo "We found a .c file"
       done
fi
Run Code Online (Sandbox Code Playgroud)

但是如果我加入echo "Test",它有效吗?

if [ -z "$#" ]
    echo "Test"
    then
        for i in *.c; do
            echo "We found a .c file"
       done
fi
Run Code Online (Sandbox Code Playgroud)

我是bash的新手,也不知道为什么会发生这种情况.谁能帮我吗?

bash if-statement

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

测试变量的感叹号在bash shell中是否为真

我知道在贝壳中感叹号可以反转条件的结果.在这里,我想用它来测试变量是真还是假.

#! /bin/bash
bat=false
if [ ! $bar ]; then
    echo 'bar is false'
else
   echo 'bar is true'
fi
Run Code Online (Sandbox Code Playgroud)

我期待'酒吧是假的'.然而事实证明了另一种方式.然后我用"$ bar"=="false".这是正确的.

那么使用感叹号的提示是什么?当我们测试文件时,它只会反转结果吗?

shell

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

标签 统计

bash ×6

if-statement ×3

shell ×3

unix ×3

linux ×1

loops ×1

regex ×1

string ×1

syntax ×1

terminal ×1