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

StackOverflow https://stackoverflow.com/questions/4484113

Вопрос

Быстрый вопрос. Я люблю эмац. Я ненавижу печатать вещи, поэтому мне нравится использовать e призывать Эмац.

Ранее у меня был мой .bash_profile (OS X) настроен как: alias e="emacs .". Анкет Тем не менее, я устал от того, чтобы все еще приходилось набирать emacs {файл}, когда я просто хотел отредактировать один файл.

Поэтому я пытался поднять это, от некоторого гугля, но Баш жалуется на []:

###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
}

Другие советы

Пытаться

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top