Ваш вопрос не имеет большого смысла. Прежде всего, если вы скажете
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 Не задавайте новый вопрос; сделать поиск.
На это уже отвечали раньше.