Ваш вопрос не имеет большого смысла. Прежде всего, если вы скажете
one=1
two=""
three=3
four=""
for num in $one $two $three $four
do
︙
тогда утверждение for
интерпретируется как
for num in 1 3
и так есть только две итерации, с num
равным 1
и 3
.
Если вы хотите иметь четыре итерации, с num
равным 1
, (ноль), 3
и (ноль), то вам нужно сказать
for num in "$one" "$two" "$three" "$four"
Вы должны цитировать ссылки на переменные оболочки, если у вас нет веских причин не делать этого, и вы уверены, что знаете, что делаете.
Так,
for num in "$one" "$two" "$three" "$four"
do
echo "num is $num"
done
приведет к
num is 1
num is
num is 3
num is
Теперь, если вы хотите, чтобы результаты сказали 1
, 0
, 3
, 0
, просто сказать
for num in "$one" "$two" "$three" "$four"
do
if [ "$num" = "" ]
then
num=0
fi
echo "num is $num"
done
Обратите внимание, что
- Вы должны иметь пробелы до и после
[
,
- Вы должны иметь пробелы до и после
=
,
- Вы должны иметь пробел перед
]
(и после него, если после него есть что-то еще), и
fi
, if
пишется в обратном направлении.
Но в заголовке вашего вопроса упоминаются «неустановленные переменные».
two
и four
установлены в пустую строку; five
и six
(и orange
, pumpkin
, tiger
и почти бесконечный список имен других потенциальных переменных) не установлены. Есть разница
Если это то, что вас интересует, вам нужно задать другой вопрос, потому что, если вы делаете
for num in "$one" "$two" "$three" "$four" "$five" "$six" "$orange" "$pumpkin" "$tiger"
do
︙
тогда будет невозможно отличить five
, six
, orange
, pumpkin
и tiger
итерации от two
и four
итераций - num
будет установлен в пустую строку во всех семи случаях.
Вам нужно будет напрямую проверить переменные $four
и $five
(и т.д.).
PS Не задавайте новый вопрос; сделать поиск.
На это уже отвечали раньше.