如何检查变量是否已传递给 Bash 中的函数?

Jos*_*nto 2 bash shell-script

我有这个:

function abash {
    if [[ -v $1 ]]
        then
            atom ~/Shell/$1.sh
        else
            atom ~/.bashrc
    fi
}
Run Code Online (Sandbox Code Playgroud)

在我的~/.bashrc文件中,以便更容易地使用 Atom 来编辑我的 bash 脚本,现在的问题是这[[ -v $1 ]]是为了检查输入是否$1存在但它似乎不存在,即使我提供了有效的输入(例如,运行abash cdwhere ~/Shell/cd.shis a file I want to edit) abash opens ~/.bashrc. 我该如何解决这个问题?我从哪里得到[[ -v $1]]测试的想法?这个回答。

Spa*_*awk 6

我不确定为什么会失败,但是(至少)还有另外两种可能的选择。[[ -v $1 ]]您可以使用以下任一项来代替。

检查参数数量是否大于零。

[[ $# > 0 ]]
Run Code Online (Sandbox Code Playgroud)

检查第一个参数是否为空。

[[ $1 != '' ]]
Run Code Online (Sandbox Code Playgroud)


cuo*_*glm 5

bash条件表达式-v var检查shell 变量name是否var已设置。

当使用 时,您实际上检查了是否设置了[[ -v $1 ]]以内容命名的变量。$1在你的例子中,它意味着$cd,它从未被设置。

您可以简单地检查是否$1为非空字符串,使用-n

function abash {
    if [[ -n "$1" ]]
        then
            atom ~/Shell/"$1.sh"
        else
            atom ~/.bashrc
    fi
}
Run Code Online (Sandbox Code Playgroud)

请注意,var必须是工作的shell 变量-v var[[ -v 1 ]]永远不会工作,因为1表示位置参数