LINUX.ORG.RU

а точно ли нужен case ?

[ $myvar ] && do_something_good || do_something_evil 
Khan
()
Ответ на: комментарий от Homura_Akemi

Оу, немного не очевидно вышло. Короче, если VAR не будет задана вообще, то это тоже сработает.

Homura_Akemi
()

if [ «x$var» == «x» ]; then echo var not set; fi
В шелле емнип нет разницы между «переменная не задана» и «переменная пуста»

marvin_yorke ★★★
()
Ответ на: комментарий от marvin_yorke

В bash'е разница есть. Если переменная пуста, то «set» её покажет, а если не задана, или удалена через «unset», то «set» её не покажет.

И в конструкци «${var:-DEFAULT}» и ей подобных, с двоеточием разницы между «пуста» и «не задана» не будет, а без двоеточия будет.

P.S. Чего хотел ТС я не понял

mky ★★★★★
()
Ответ на: комментарий от mky

Я имел в виду разницы при обращении к такой переменной - в обоих случаях вернется пустая строка

marvin_yorke ★★★
()
Ответ на: комментарий от Kindly_Cat

Есть.

isset () {
case ${var-unset} in
    unset ) echo unset ;;
    "") echo empty ;;
    a ) echo a ;;
    * ) echo default ;;
esac
}

isset # var не определена: unset
var=
isset # var определена, но пустая: empty
unset var
isset # определение удалено: unset

at ★★
()
Ответ на: комментарий от at

А переданный скрипту параметр (аргумент) может ли быть неопределённым? Даже если никакой параметр не был передан, он будет пустым, не?

Kindly_Cat
() автор топика
Ответ на: комментарий от Kindly_Cat

зависит от set -u

at@home:~$ echo $var
bash: var: unbound variable
at@home:~$ set +u
at@home:~$ echo $var

Я её включаю, чтобы избежать ошибок
val=1 echo $var

at ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.