ファイルを解析し、ファイル内の固定幅に応じて変数を設定するスクリプトを作成しました。
次に、各変数をチェックし、空白のフィールドの場合は「0」に設定します。これを簡単に変形すると次のようになります。
one=1
two=""
three=3
four=""
for num in $one $two $three $four
do
echo num is $num
done
出力は次のようになります:
num is 1
num is 3
私がやりたいのは のコードですif $two is null then two=0
。
どうやってやるの?
答え1
-z比較演算子が必要です http://tldp.org/LDP/abs/html/comparison-ops.html
if [ -z $two ]; then ## or [ -z $num ] to test them all
two=0
fi
echo "num is $num"
答え2
あなたの質問はあまり意味をなさない。まず、あなたが言うなら
one=1
two=""
three=3
four=""
for num in $one $two $three $four
do
︙
このfor
文は次のように解釈される。
for num in 1 3
したがって、とnum
に等しい反復は 2 つだけです。 、(null)、 (null)に等しい反復を 4 つにしたい場合は、次のように記述する必要があります。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
反復と区別する ことができなくなり、 7 つのケースすべてで は空の文字列に設定されます。および(など) 変数を直接テストする必要があります。six
orange
pumpkin
tiger
two
four
num
$four
$five
PS: 新しい質問をするのではなく、検索してください。これは以前に回答されています。