Как я могу проверить, есть ли у моей функции Bash аргумент или нет? - PullRequest
1 голос
/ 19 декабря 2010

Быстрый вопрос. Я люблю Emacs. Хотя я ненавижу набирать текст, поэтому мне нравится использовать e для вызова emacs.

Ранее у меня был .bash_profile (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.

Ответы [ 2 ]

2 голосов
/ 19 декабря 2010

Попробуйте

if [ $# -ge 1 ]; then
  emacs "$@"

Я думаю, что bash очень специфичен для пробелов.Я даже удивлен, что вы можете опустить пробел между именем функции и ().(Кроме того, использование $ @ должно открыть все передаваемые вами файлы.)

ETA: лучше проверить количество аргументов, в случае e "" foo.txt ...

1 голос
/ 19 декабря 2010
#!/bin/bash                       

###smart emacs, open file, or if none, dir
e()
{
    if [[ -z "$1" ]]; then # if "$1" is empty
        emacs .
    else
        emacs "$1"
    fi
}
...