Когда передается -a
, вы передаете значение в командной строке, которое задано в качестве аргумента для -a
, хранящееся в OPTARG
.Во втором примере у вас такого аргумента нет, поэтому значение получает пустую строку, которая должным образом передается функции.
К сожалению, здесь строка 0 длины не сохраняется в качестве аргумента, и прина самом деле наименьшей будет строка длиной 0, которая «пройдет» тест -z
.
Так что для «того, что вы делаете неправильно», кажется, что вы ожидаете, что пустой аргумент будет рассматриваться какнепустой аргумент.Вы можете проверить OPTARG
перед использованием его в качестве аргумента, если хотите убедиться, что -a
действительно имеет значение, переданное вместе с ним.