Как я могу проверить, получил ли моя функция 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
...