我有这个:
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]]测试的想法?这个回答。
我不确定为什么会失败,但是(至少)还有另外两种可能的选择。[[ -v $1 ]]您可以使用以下任一项来代替。
检查参数数量是否大于零。
[[ $# > 0 ]]
Run Code Online (Sandbox Code Playgroud)
检查第一个参数是否为空。
[[ $1 != '' ]]
Run Code Online (Sandbox Code Playgroud)
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表示位置参数。