如何检查Bash函数是否有参数?
快速提问。我喜欢emacs。我讨厌输入东西,所以我喜欢用如何检查Bash函数是否有参数?,bash,.bash-profile,bash-function,Bash,.bash Profile,Bash Function,快速提问。我喜欢emacs。我讨厌输入东西,所以我喜欢用e调用emacs 以前我将.bash_配置文件(OS X)配置为:alias e=“emacs.”。然而,当我只想编辑一个文件时,我已经厌倦了仍然必须键入emacs{file} 所以我试着在谷歌上搜索一下,但是bash抱怨[]: ###smart emacs, open file, or if none, dir e() { if [$1]; then emacs $1 else emacs
e
调用emacs
以前我将.bash_配置文件(OS X)配置为:alias e=“emacs.”
。然而,当我只想编辑一个文件时,我已经厌倦了仍然必须键入emacs{file}
所以我试着在谷歌上搜索一下,但是bash抱怨[]
:
###smart emacs, open file, or if none, dir
e()
{
if [$1]; then
emacs $1
else
emacs .
fi
}
我想用它来做:e something.c
或者,只是e
试试看
#!/bin/bash
###smart emacs, open file, or if none, dir
e()
{
if [[ -z "$1" ]]; then # if "$1" is empty
emacs .
else
emacs "$1"
fi
}
我认为bash在空间方面非常独特。我甚至感到惊讶的是,允许您省略函数名和()之间的空格。(另外,使用$@应该可以打开您传递的所有文件。)
ETA:最好检查参数的数量,如果是
e”“foo.txt
…,那么这是否为,如果参数的数量($#?)大于或等于1,则将其全部打开?很抱歉,如果这是显而易见的,我对bash函数很陌生。@Josh:我很担心这个问题。。。区别在于(我相信)使用$*,e foo bar将打开“foo bar”,而$@将打开foo和bar,即拆分为单独的单词。这里有一个更完整的解释:@Josh:是的。文件名中的空格和引号使我尽可能避免接触它们。啊,太好了!最后一个问题,为什么要使用“$@”左右的“?我看到那个页面说你/应该/在$@上使用它们,但你/必须/在$*上使用它们。为什么会这样?@Ulrich当$*和$@不带引号时,$@和$@之间没有区别,$@带双引号,“$@”是“$1”$2”…,而“$*”扩展为单参数“$1c$2c…”(其中c是IFS的第一个字符)。你几乎总是想要“$@”。@Josh单个的[
实际上是一个命令,如果你键入哪个[
,你可能会得到一个类似/usr/bin/[
的路径。这就是为什么你在[
后面需要一个空格。[
语法是的一个改进[
因为它允许您在其中使用逻辑运算符,例如&&
,|
或=
。键入帮助[
以查看更多信息。我会详细了解这一点,-z标志的作用是什么?并且$1必须在“”中吗?我有另一个设置为py(){python$1}而且它似乎没有抱怨。@Josh键入帮助测试
以查看标志列表。-z
检查所讨论的参数是否为NULL
-z是“检查参数的长度是否为0”。在这种特殊情况下,省略“”可能不会有什么坏处,但这不是您应该养成的习惯,因为引号保持文件名和空格的完整性(将参数视为文本替换,而不是像编程语言那样传递形式参数)
if [ $# -ge 1 ]; then
emacs "$@"