相关疑难解决方法(0)

如何测试变量是否为空或仅包含空格?

以下 bash 语法验证是否param不为空:

 [[ !  -z  $param  ]]
Run Code Online (Sandbox Code Playgroud)

例如:

param=""
[[ !  -z  $param  ]] && echo "I am not zero"
Run Code Online (Sandbox Code Playgroud)

没有输出,很好。

但是当param除了一个(或多个)空格字符为空时,情况就不同了:

param=" " # one space
[[ !  -z  $param  ]] && echo "I am not zero"
Run Code Online (Sandbox Code Playgroud)

“我不是零”是输出。

如何更改测试以将仅包含空格字符的变量视为空?

shell bash string shell-script

290
推荐指数
5
解决办法
53万
查看次数

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

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

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万
查看次数

test -v 对位置参数有效吗?

来自 bash 手册

-v varname

如果设置了 shell 变量 varname(已分配值),则为 True。

我测试位置参数是否在 bash 脚本中1设置-v 1,但当我提供命令行参数时,它不会让测试通过。我想知道为什么?

#! /bin/bash

if [ -v 1 ]; then
    echo "1 exists"
fi
Run Code Online (Sandbox Code Playgroud)

谢谢。

bash

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

标签 统计

bash ×3

ksh ×1

quoting ×1

shell ×1

shell-script ×1

string ×1

test ×1