Bashで難読化しながら数値を得る方法
10進数
0
code:sh
echo $[]
1
code:sh
echo $[!$[]]
echo $[-~$[]]
!; echo $?
echo ${##}
2
code:sh
echo [$? # from くおん氏
echo $[-~-~$[]]
echo $[!$[]+!$[]]
echo $[!$[]<<!$[]]
echo ${#-} # setオプションの長さ。環境依存
3
code:sh
echo $[-~-~-~$[]]
echo $[!$[]+!$[]+!$[]]
echo $[${#-}+!$[]] # setオプションの長さ。環境依存
4
code:sh
echo $[-~-~-~-~$[]]
echo $[!$[]<<!$[]<<!$[]]
5
code:sh
echo $[${#-}+${#-}+!$[]] # setオプションの長さ。環境依存
6
code:sh
echo /${?#??} # from くおん氏
7
code:sh
echo $[$[]$[!$[]]$[]-$[!$[]]]
echo _${?/??}
!;echo $[$[]$?$[]-$?]
8
code:sh
echo $[$[]$$$/$$$[]] # Zshだと違う値が返る !;echo $[$[]$?$[]] # Zshだと違う値が返る
9
code:sh
echo $[$[]$$$/$$$[]+$$/$$] # Zshだと違う値が返る !;echo $[$[]$?$[]+$?] # Zshだと違う値が返る
27
code:sh
echo _${?/?}
32
code:sh
64
code:sh
echo $[$[]$[!$[]]$[]*$[]$[!$[]]$[]]
!;echo $[$[]$?$[]*$[]$?$[]]
echo _$[($?+!$[])/(!$[]+!$[])]
echo _$[($?+!$[])/${#-}]
127
code:sh
echo _$?
128
code:sh
echo _$[$?+!$[]]
8進数
bashでは0始まりの数値は8進数として解釈される 8
code:8.sh
echo $[$[]$[!$[]]$[]]
9
code:8.sh
echo $[$[]$[!$[]]$[!$[]]]
2進数
算術演算式中で2#で始まる数値を宣言すると2進数として解釈される
これ0と1だけで表現できるので記号難読化と相性が良い
ただし2#の2に演算結果を使えない
演算結果を使うにはevalなどと組み合わせる必要がある
code:2.sh
echo $[2#$[!$[]]$[]] # 2
echo $[2#$[!$[]]$[!$[]]] # 3