1

for ((i=000;i<040;i++));do ...

0から39まで、40の値があります!?...から Aへの印刷用Z???

for ((i=000;i<040;i++));do
    echo -e $(eval "printf "\\\\%04o" $((65+0$i)) ");
  done 2>/dev/null |
  xargs

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

変!?

70から154までの85の値があります。

for ((i=0070;i<0155;i++));do
    echo -e $(eval "printf "\\\\%04o" $((19+0$i)) ");
  done 2>/dev/null |
    xargs
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

欠測値を説明する完全な答えが必要でした。

:-p

私の完全な答え

この質問は閉じられたため、回答を追加できませんでした。そのため、私の説明があります。

誤解は2>/dev/null!!の(乱用)使用によって行われます。

したがって、これを削除するだけで次のようになります。

for ((i=0070;i<0155;i++));do
    echo -e $(eval "printf "\\\\%04o" $((19+0$i)) ");
  done |
    xargs
bash: 19+058: value too great for base (error token is "058")
bash: 19+059: value too great for base (error token is "059")
...
bash: 19+098: value too great for base (error token is "098")
bash: 19+099: value too great for base (error token is "099")
bash: 19+0108: value too great for base (error token is "0108")
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

物事がより明確になります!

for ((i=0070;i<0155;i++));do
    echo -e $(eval "printf "\\\\%04o" $((19+0$i)) ")
  done 2> >(wc -l >&2) | xargs 
27
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

実際には27のエラーがあり、値は... 56から108です:

printf "%d\n" 0070 0155
56
109

わかりました。8進数なので、85の値はありませんが、53の値があります。

echo $(( 155 - 70 ))  $(( 0155 - 0070 ))  $(( 109 - 56 ))
85 53 53

これにより、27個のエラーで53個の値が作成されます。

echo $((53-27))
26

はい!

これは(私のアルファベットで)正しい文字数です!

結論

質問は次のように書き直すことができます。

虐待が/dev/nullどのように奇妙な行動を起こす可能性があるか

したがって、STDERRをリダイレクトするときは注意して、次のようなコマンドを使用することをお勧めします。

command 2> >(grep -v "unwanted message" >&2)
4

3 に答える 3

6

040は10進数の32に対して8進数であるため、31のステップがあります。

8進数は、基数8の記数法です。10進数には、基数10と16進数16があります。

于 2013-01-20T10:10:56.270 に答える
5

数字の前に0が付いているので、単に8進数を使用しています。

つまり、ベース10ではなくベース8です。

于 2013-01-20T10:09:42.860 に答える
1

以下を使ってアルファベットを印刷してみませんか?

for letter in {A..Z} ; do
    echo $letter
done  
于 2013-01-20T10:10:29.760 に答える