标签: test

Bash 运算符 [[ vs [ vs ( vs ((?

我对这些运算符在 bash 中使用时有何不同(括号、双括号、括号和双括号)感到有些困惑。

[[ , [ , ( , ((
Run Code Online (Sandbox Code Playgroud)

我见过人们在这样的 if 语句中使用它们:

if [[condition]]

if [condition]

if ((condition))

if (condition)
Run Code Online (Sandbox Code Playgroud)

shell bash test

436
推荐指数
6
解决办法
19万
查看次数

为什么不带引号的带空格的参数扩展在双括号“[[”内起作用,而在单括号“[”内不起作用?

我对使用单括号或双括号感到困惑。看看这段代码:

dir="/home/mazimi/VirtualBox VMs"

if [[ -d ${dir} ]]; then
    echo "yep"
fi
Run Code Online (Sandbox Code Playgroud)

尽管字符串包含空格,但它工作得很好。但是当我将其更改为单括号时:

dir="/home/mazimi/VirtualBox VMs"

if [ -d ${dir} ]; then
    echo "yep"
fi
Run Code Online (Sandbox Code Playgroud)

它说:

./script.sh: line 5: [: /home/mazimi/VirtualBox: binary operator expected
Run Code Online (Sandbox Code Playgroud)

当我将其更改为:

dir="/home/mazimi/VirtualBox VMs"

if [ -d "${dir}" ]; then
    echo "yep"
fi
Run Code Online (Sandbox Code Playgroud)

它工作正常。有人可以解释发生了什么吗?什么时候应该在变量周围分配双引号,"${var}"以防止空格引起的问题?

bash ksh quoting test

106
推荐指数
3
解决办法
4万
查看次数

如何检查“if”语句中是否存在变量?

我需要在if语句中检查变量是否存在。有以下作用:

if [ -v $somevar ]
then
    echo "Variable somevar exists!"
else
    echo "Variable somevar does not exist!"
Run Code Online (Sandbox Code Playgroud)

与此最接近的问题是this,它实际上并没有回答我的问题。

bash test variable

98
推荐指数
4
解决办法
25万
查看次数

如何检查文件是否是指向目录的符号链接?

我可以检查文件是否存在并且是带有 -L 的符号链接

for file in *; do
    if [[ -L "$file" ]]; then echo "$file is a symlink"; else echo "$file is not a symlink"; fi
done
Run Code Online (Sandbox Code Playgroud)

如果它是带有 -d 的目录:

for file in *; do
    if [[ -d "$file" ]]; then echo "$file is a directory"; else echo "$file is a regular file"; fi
done
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能只测试到目录的链接呢?


我模拟了一个测试文件夹中的所有案例:

/tmp/test# ls
a  b  c/  d@  e@  f@

/tmp/test# file *
a: ASCII text
b: ASCII text
c: directory
d: symbolic link …
Run Code Online (Sandbox Code Playgroud)

shell bash test

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

Bash 测试:“=~”有什么作用?

#!/bin/bash
INT=-5

if [[ "$INT" =~ ^-?[0-9]+$ ]]; then

echo "INT is an integer."

else

echo "INT is not an integer." >&2

exit 1

fi
Run Code Online (Sandbox Code Playgroud)

前导~在起始正则表达式中做什么?

bash test

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

Bash if 语句 [: missing `]' 错误

我在使用 bash 时遇到问题。我试图将命令放入if语句中,然后将其与字符串进行比较。

这完美地工作。

echo $(ipcs | grep Shared | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)

当我把它放在if声明中时,我遇到了一些问题。

$ if [ "$(ipcs | grep Shared | awk '{print $2}')" -eq "Shared"]; then
  echo expression evaluated as true;
else
  echo expression evaluated as false;
fi
bash: [: missing `]'
expression evaluated as false

$ if [ "$(ipcs | grep Shared | awk '{print $2}')" = "Shared"]; then
  echo expression evaluated as true;
else
  echo expression evaluated as false;
fi
bash: [: …
Run Code Online (Sandbox Code Playgroud)

bash shell-script test

59
推荐指数
1
解决办法
16万
查看次数

检查输入数字是否为整数

我试图检查一个输入是否是一个整数,我已经检查了它一百次,但没有看到这里的错误。唉,它不起作用,它会触发所有输入(数字/字母)的 if 语句

read scale
if ! [[ "$scale" =~ "^[0-9]+$" ]]
        then
            echo "Sorry integers only"
fi
Run Code Online (Sandbox Code Playgroud)

我玩过引号,但要么错过了它,要么什么也没做。我做错了什么?有没有更简单的方法来测试输入是否只是整数?

bash quoting regular-expression test

53
推荐指数
6
解决办法
18万
查看次数

“/bin/[”究竟是如何工作的?

我总是惊讶于文件夹中/bin有一个[程序。

这就是我们在做这样的事情时所说的:if [ something ]

通过[在 shell 中显式调用程序,它会要求提供相应的],并且当我提供右括号时,无论我在括号之间插入什么,它似乎什么都不做。

毋庸置疑,获得有关程序帮助的通常方法是行不通的,即既不可行man [也不行[ --help

shell test

51
推荐指数
3
解决办法
9397
查看次数

test 或 [ 或 [[ 在 bash shell 和其他 shell 之间更便携吗?

我知道我可以

$ [ -w /home/durrantm ] && echo "writable"
writable
Run Code Online (Sandbox Code Playgroud)

或者

$ test -w /home/durrantm && echo "writable"
writable
Run Code Online (Sandbox Code Playgroud)

或者

$ [[ -w /home/durrantm ]] && echo "writable"
writable
Run Code Online (Sandbox Code Playgroud)

我喜欢使用第三种语法。它们在所有方面以及所有负面和边缘情况下都等效吗?可移植性是否有任何差异,例如 Ubuntu 上的 bash 和 OS X 上的 bash 或较旧/较新的 bash 版本,例如 4.0 之前/之后,它们是否都以相同的方式扩展表达式?

shell posix portability test

47
推荐指数
6
解决办法
1万
查看次数

[[ $a == z* ]] 和 [ $a == z* ] 有什么区别?

这两者有什么区别吗。

[[ $a == z* ]]
Run Code Online (Sandbox Code Playgroud)

[ $a == z* ] 
Run Code Online (Sandbox Code Playgroud)

我可以举一个例子,他们会有不同的输出吗?

此外, 的工作方式[[ ]][ ]?

bash shell-script wildcards test

39
推荐指数
2
解决办法
3856
查看次数