シェルの習熟度を向上させるために、Linux シェル プログラミング ガイドに従っています。今日、ネストされた for ループのセクションに到達しました。
次のスクリプトは、端末にチェス盤を出力します。
for (( i = 1; i <= 9; i++ )) ### Outer for loop ###
do
for (( j = 1 ; j <= 9; j++ )) ### Inner for loop ###
do
tot=`expr $i + $j`
tmp=`expr $tot % 2`
if [ $tmp -eq 0 ]; then
echo -e -n "\033[47m "
else
echo -e -n "\033[40m "
fi
done
echo -e -n "\033[40m" #### set back background colour to black
echo "" #### print the new line ###
done
そして、それは正しく動作します。早速、先頭にシバンをつけてこんな感じにしました
#!/bin/sh
for (( i = 1; i <= 9; i++ )) ### Outer for loop ###
do
for (( j = 1 ; j <= 9; j++ )) ### Inner for loop ###
do
tot=`expr $i + $j`
tmp=`expr $tot % 2`
if [ $tmp -eq 0 ]; then
echo -e -n "\033[47m "
else
echo -e -n "\033[40m "
fi
done
echo -e -n "\033[40m" #### set back background colour to black
echo "" #### print the new line ###
done
ただし、現在では、各白/黒ブロックが行全体に印刷されます。
誰でも理由を理解するのを手伝ってもらえますか? (Mac Snow Leopard でシェルを実行しています)。ありがとう!ウィリアム
ギャング:
ただの更新ですが、「#!/bin/bash」を使用すると正常に動作することがわかりました。それはshの内部実装の問題ですか?
ありがとう!