Можно использовать любое из следующих к командам выполнения когда $1
пусто:
[[ ! $1 ]] && { COMMANDS; }
[[ $1 ]] || { COMMANDS; }
[[ -z $1 ]] && { COMMANDS; }
[[ -n $1 ]] || { COMMANDS; }
Кроме того, Вы не должны заключать расширение в кавычки в этом конкретном примере, поскольку никакое разделение слова не выполняется.
Если Вы желаете проверить, существуют ли аргументы, тем не менее, Вы были бы лучше для использования (( $# ))
.
Если я понял Ваши намерения, вот то, как Ваш код мог быть написан с getopts
:
#!/bin/bash
(( $# )) || printf '%s\n' 'No arguments'
while getopts ':n:h' opt; do
case "$opt" in
n)
[[ $OPTARG ]] && printf '%s\n' "Commands were run, option $OPTARG, so let's do what that says."
[[ ! $OPTARG ]] && printf '%s\n' "Commands were run, there was no option, so let's run some stuff."
;;
h) printf '%s\n' 'Help printed' ;;
*) printf '%s\n' "I don't know what that argument is!" ;;
esac
done
-z
оценит к истинному если$1
пусто. Каков наименьший пример кода, который демонстрирует проблему, которую Вы имеете непосредственно? – Chris Down 15.09.2011, 19:40