相关疑难解决方法(0)

如何使用双括号或单括号,括号,花括号

我对Bash中括号,括号,花括号的用法以及它们的双重或单一形式之间的区别感到困惑.有明确的解释吗?

syntax bash

637
推荐指数
6
解决办法
34万
查看次数

在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历史记录

我想保存发布每个命令的当前目录以及历史记录中的命令.为了不搞乱,我考虑在行尾添加当前目录作为注释.一个例子可能有帮助:

$ cd /usr/local/wherever
$ grep timmy accounts.txt
Run Code Online (Sandbox Code Playgroud)

我希望bash将最后一个命令保存为:

grep timmy accounts.txt # /usr/local/wherever
Run Code Online (Sandbox Code Playgroud)

这个想法是这样我可以立即看到我发出命令的位置.

bash

60
推荐指数
4
解决办法
9578
查看次数

在Bash中使用变量作为案例模式

我正在尝试编写一个Bash脚本,该脚本在case语句中使用变量作为模式.但是我无法让它发挥作用.

案例陈述:

case "$1" in
    $test)
        echo "matched"
        ;;
    *)
        echo "didn't match"
        ;;
esac
Run Code Online (Sandbox Code Playgroud)

我已经试过分配此$testaaa|bbb|ccc,(aaa|bbb|ccc),[aaa,bbb,ccc]和其他几个组合.我也尝试了这些作为case语句的模式:@($test),@($(echo $test)),$($test).也没有成功.

编辑

为清楚起见,我希望变量代表多个这样的模式:

case "$1" in
    aaa|bbb|ccc)
        echo "matched"
        ;;
    *)
        echo "didn't match"
        ;;
esac
Run Code Online (Sandbox Code Playgroud)

bash pattern-matching switch-statement

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

在函数Bash中:如何检查参数是否是一个set变量?

我想实现一个bash函数,test是第一个参数实际上是一个变量,在某处定义.

例如,在我的.bashrc:

customPrompt='yes';
syntaxOn='no';
[...]
function my_func {
    [...]
    # I want to test if the string $1 is the name of a variable defined up above
    # so something like: 
    if [[ $$1 == 'yes' ]];then 
         echo "$1 is set to yes";
    else
         echo "$1 is not set or != to yes";
    fi
    # but of course $$1 doesn't work
}
Run Code Online (Sandbox Code Playgroud)

需要输出:

$ my_func customPrompt
> customPrompt is set to yes
$ my_func syntaxOn
> syntaxOn is …
Run Code Online (Sandbox Code Playgroud)

variables bash if-statement

5
推荐指数
1
解决办法
2651
查看次数

为什么"真实"和"假"测试都是真的?

单词"true"和"false"是bash的特殊单词(builtins).如果在if测试中使用,它们可以直观地预期:

$ if true; then echo "true"; else echo "false"; fi
true
$ if false; then echo "true"; else echo "false"; fi
false
Run Code Online (Sandbox Code Playgroud)

但是,这两个测试:

$ [[ true ]] && echo "true" || echo "false"
true
$ [[ false ]] && echo "true" || echo "false"
true
Run Code Online (Sandbox Code Playgroud)

两者都是真的.为什么?

linux bash shell command-line-interface

3
推荐指数
1
解决办法
191
查看次数