シェル変数にnullが入る場合の対処方法 ( シェル変数に設定された文字数確認 )
1.概要
2.詳細
シェル・プログラミングを実施すると、VAL=$(...........)にて処理結果をシェル変数に入れます。しかし、シェル変数(ここでは${VAL})に値が設定できずにNULLとなると、VAL=$(lsblk | grep sdd)
if [ abc${VAL} != abc ] && [ ${VAL} = 1 ]; then
echo "data is 1"
fi
${VAL}が空の場合は等しくなるので判断できます。
新しい記述方法は以下の通りで、シェル変数に設定された文字数を数えます。
echo ${VAL}は中身がなく、何も表示されません
VAL=""
echo ${VAL}
echo ${#VAL}は0となります
echo ${#VAL}
0
これでシェル変数に保存されている文字数を知ることができ、シェル変数の値がNULLの検知に利用しています。改良したシェルは以下の通りです。
VAL=$(lsblk | grep sdd)
if [ ${#VAL} != 0 ] && [ ${VAL} = 1 ]; then
echo "data is 1"
fi
3.所見
以前の方式でも可能ですが、新しい方式がスマートな感じです。また、処理内容が明確である点もスッキリしているとおもいます。私は新しい方式に順次入替えをしています。
以前の方式を最初にネットで見つけた時は、何を実行しているか、すぐに理解できませんでした。この記述方式はUbuntu/LinuxMintの中のシステムで利用するshellでも見かけることもあります。従って、以前の方式が誤りということではありません。
しかし、同じ文字列を等号の両端に追加してNullを見つけるやり方はスマートではありません。それよりも、シェル変数に保存された内容の文字数を数えてゼロであることを判別するほうがスマートだと思っています。
このことが理由で、私は${#VAL}方式を活用するようになりました。
参考
[本ブログ内参照]・ubuntuのshellのdash、組込shell変数の利用でbashとの違い
・viewとvi(vim)を利用したHEX dumpの表示と修正方法
コメント
コメントを投稿