Как я могу проверить, получил ли моя функция Bash аргумент или нет?

Быстрый вопрос. Я люблю 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 ответа

Решение
#!/bin/bash                       

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

Пытаться

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

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

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

Другие вопросы по тегам