難読化シェル芸コレクション

いろんな人が書いた難読化シェル芸(後で解読しておくためのメモ)

人類の資産を永く保存しなければという使命感に基づいて記録しています

精査はしていないので、もしかしたら重複しているものがあるかもしれません。あしからず。

隊長さん

UTF-16リトルエンディアンを利用したdate

echo -n 搀愀琀攀|iconv -t utf-16le|bash

記号と2を使ってdate

_ 2>/dev/null
__=$?
__=${__/${__/?}}
___=`/???/?$__$__/???$__??? <<< $??$?`
___=${___/${___/??}}
__=`/???/?$__$__/???$__??? <<< $__??`
__=${__/${__/??}}

/???/$__??? /???/$___?? 
$_

記号だけで"シェル芸"を出力

: "$(/???/??${##}/???${##}???<<<//}?{?)"; : /???/${_/${_/??}}?; : "$($_ ./????????????/???.?$((${##}+${##}))/????????.???)"; : ${_/???????????????????}; echo ${_/${_/????}}

yamayaさん

フィボナッチ数列

fib='a+=b,b=a-b,a<_[`echo $b>&3`]||fib'
((a=1,fib))3>&1

記号だけでフィボナッチ数列

! : "`/???/???/???${#?}???<<<_.`";_____=${_::-~$?}
____='__+=___,___=__-___,__<_[$($_____<<<$___>&$[-~${##}])]||____'
((__=-~$?,____))|&$_____

ぐれさんが解説記事を書いてくださっています https://gist.github.com/greymd/455a13bb6f757c5ccd00bfb155d525e2

シェルピンスキーのギャスケット

! _(){
((____=__,${_______=_____[____]^=_____[____-__],++____<___&&_______}))
$______<<<${_____[@]}
((++________<___))&&_
}
_____=(${__=$?})
___=$[__<<$__$?+~__]
: /*/$$;: ${_:__:__}
(${______=/???/???/?$[~__*~__]}<<<${_^}$__\ $___\ $___;_)|convert - /images/a.png

記号だけでdateコマンド

___=${__=${#?}}$[$__$__*~__*~__]
(("_[\$($'\\$___\\$[___-__+~__]\\$[___-$__$?*~__]\\$[___+__]'>&$[-~__])]"))>&/???/??/$__

. /???/??/$?<<<.\ /???/??/$?\<\<\<\$\'\\$(($$/$$))$(($$/$$<<$$/$$<<$$/$$))$(($$/$$<<$$/$$<<$$/$$))\\$(($$/$$))$(($$/$$<<$$/$$<<$$/$$))$(($$/$$))\\$(($$/$$<<($$/$$<<$$/$$<<$$/$$)))$(($$/$$<<$$/$$<<$$/$$))\\$(($$/$$))$(($$/$$<<$$/$$<<$$/$$))$(($$$?/$$/($$/$$<<$$/$$)))\'

超短いFizzBuzz

n+=:; s=; : ${p=$(<$0)}
[[ $n =~ ^(...)+$ ]] && s=Fizz
[[ $n =~ ^(.....)+$ ]] && s+=Buzz
echo ${s:-${#n}}
[[ ${#n} =~ ... ]] || echo "$p">>$0

Hello, world ゴルフ

H(){
echo -n ${*:- };}
l(){ exec 2>/dev/nu\
ll; IFS=;}
o(){ H "${1::0
,1}";}

while
o $s
read -r s; do
l #シェル芸
done <$0
! ねこ大好き

dashでdate

#!/bin/dash
_(){ __=$@;}
_ /???/???/[![]
_ /[!${__##*/}]??
_ /???/???/?${__##*/??}
`${__##* } \)-@ _-{<<_
.+>/
_`

dcでdate

`dc -ezzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzPkkPzzzzzzzzzzzzzzzzzzzzPkkkkkkkkkkkkkkP`

ぐれさん

記号だけで任意の文字列を出力

! : "`/???/???/??$[-(~${##}+~${##}-${##})]???<<<///`";__=${_:$[-~${#?}+-~${#?}]:${#?}};___='_[$( _____=($(/???/???/????.??)); /???/???/${__}???-???? ${_____[$[-~${##}-~${##}]]}>&$[-~${##}])]';((___)) &> /?${__}?/???o??

dcを利用してほぼ記号だけで任意の文字列を出力

: ${##};dc -e "2i?P" <<<$_$_$_$?$?$?$_$_$_$?$?$?$?$?$?$_$_$?$?$?$?$_$_$?$_$_$_$?$?$?$_$_$_$?$?$?$?$?$_$?$_$?$?$_$?$?$_$_$_$_$_$?$?$?$_$_$_$?$?$?$?$?$?$_$_$?$?$_$?$?$_$_$?$?$?$?$_$?$_$?

連想配列を利用したdate

(( a=144,b=141,c=164,d=145 ))
(( "c[\$($'\\$a\\$b\\$c\\$d' >&2)]" ))|&cat

unko.ls

: ${##}; (("_[\$($'\\$_$[-~-~-~-~-~$_]$[-~-~-~-~$_]\\$_$[-~-~-~-~$_]$[-~-~-~-~-~$_]\\$_$[-~-~-~-~$_]$[-~-~$_]\\$_$[-~-~-~-~$_]$[$_$?--~-~$_]\\$?$[-~-~-~-~$_]$[-~-~-~-~-~$_]\\$_$[-~-~-~-~$_]$[-~-~-~$_]\\$_$[-~-~-~-~-~$_]$[-~-~$_]'>&$[-~$_])]"))>&/???/??/$_

高度なyesコマンド代替

: ${p=$(<$0)}
echo "高須クリニック"
echo "$p">>$0

円周率

__=(/???/??);: ${##};${__[$[-~-~$_]} -${__[${_}$[$_$?--~-~$_]]:${___=$[-~-~-~-~$_]}:$_}<<<"$[$___-$_]*${__[$?]:$___:$_}($_)"

記号だけでojichat

! __=(${!T*}); /*/*/*/${!__[${##}]:${!__[-~$?]}:$?}*(-~$?)+${#__}:${#__[*]}}*

mosheeさん

マンデルブロ集合

dc -e '20 100 150[P6]Pfswshsm9k[q]sQ[20*Lor-3r^1+1r/]sU[dSo10-SodlUxrlUx-lm*]sV0sq[0[dlw/4*3-salqlh/3*1.5-sb0ddsxsy[lxd*lyd*+4!>Qlxdd*lyd*-la+sx2ly**lb+sy1+dlm>I]dsIxlm/d17lVxPd15lVxP13lVxP1+dlw>X]dsXxclq1+dsqlh>Y]dsYx' 2>/dev/null | convert ppm:- /images/m.png

ebanさん

記号だけでdate

! : <(:); /*/${_:${?}:$?}??${_:${?}+${?}:$?}

上田 隆一さん

dateコマンド

. <( :(){ awk '$2~/^'$1'\/t/' /???/???????? | head -c $2 ; } ; : 13 2 ; : 23 2 )

記号だけでdateコマンド

. <(__=(.{,,,}{,,,}{,,,});___=(.{,,,}{,,});echo -e $'\\U'${#__[@]}'\U'$((${#__[@]}-($$/$$)-($$/$$)-($$/$$)))'\U'$((${#__[@]}+${#___[@]}-($$/$$)-($$/$$)))'\U'$((${#__[@]}+($$/$$))) )

💩

__=( ". "{,,,}{,,,,,} . ) ; : () { ! ; ___=(/???/????);${___[${#__[@]}]} $@ ; } ; : 💩

次郎さん

ほぼ記号だけでdateコマンド①

__=(.{,,,}{,,,}{,,,});___=(.{,,,}{,,});echo -e $'\\U'${#__[@]}'\U'$((${#__[@]}-($$/$$)-($$/$$)-($$/$$)))'\U'$((${#__[@]}+${#___[@]}-($$/$$)-($$/$$)))'\U'$((${#__[@]}+($$/$$)))|sh 

ほぼ記号だけでdateコマンド②

__=$(($$/$$));___=$(($__+$__+$__));____=(/????/????/??/?);_____=${____[$__-$__]};______=${_____:${#_____}-$___:$__};_______=$((($___+$__)<<($___+$__)));________=(/???/???/????$_______);_________=${________[$__-$__]};$($_________ -$______ <<< ZGF0ZQo=)

記号だけでdateコマンド①

__=$(($$/$$));___=$(($__-$__));____=(/????/?/??);____=${____[$___]};_____=(/????/?/????);_____=${_____[$___]};______=(/????/?/???????);______=${______[$___]};${____:${#____}-$__}${_____:${#_____}-$(($__<<$__<<$__)):$__+$__}${______:${#______}-$__}

記号だけでdateコマンド②

みどりごけさん

画像にコードを埋め込んで素数を出力する

くおんさん

記号だけでdateコマンド

hiroさん

自作記号オンリー難読化シェル芸(Twitterモーメント)

hiroさんのは、こちらのTwitterモーメントを御覧ください

: ${-::${##}};"{;__=({${_^}..${_,}});# ">&$;. $;: "${__[*]}";: "${_/*\` }^${_% [*}";: "${_// }";: ${_/^};/ ${_,,};${_:${#?}:${##}}${_::${##}}${_:~${?:~$#}:${##}}${_:${#?}+${##}:${##}}
/ "$(</*/[)";${_:${?}-${##}:${##}}${_:$#${?}${##}:${##}}${_:$#${##}${##}$#$#+~$#:-~${##}}
#!/bin/zsh
/;<<<': '$[[##${#?}${#?}]$?*$?*${#?}$#+$?*${?/?}-$?*~${##}*~${##}-${##}$#]';${('$[[##${?/?}]-$?/~${##}/${#?}]')_}'>$;. ./$
#!/bin/zsh
/;<<<': '$[[##${#?}${#?}]$?*$?*${#?}$#+$?*${?/?}-$?*~${##}*~${##}-${##}$#]';${('$[[##${?/?}]-$?/~${##}/${#?}]')_}'>$;. ./$
! _=(? ???? ?????);${_[~_]: -~${?}:$?}${_[~_]:~_}${_[$?]:~_}${_[~_]:${?}:$?}
! : <( );/???/${_:${?}:$?}??${_:${?}<<${?}:$?}
: <( )
: "${_/?}`. &>${_%??}${##}`${_/??}"
: ${_/\/*[/}
: ${_/?\/*}
: ${_/${_:~$?}?}
: ${_/?]}
${_/${_: -${?}${#_}:~${##}}}
!
${!?}
${!?} / /???/?? /????/??? /???/?? /???? /???/???/???? 
$
${!?}

解読のヒント

https://twitter.com/hiro_poke91/status/1138370044226760704
https://twitter.com/minyoruminyon/status/1138395375742488578
https://twitter.com/xztaityozx_001/status/1138417841881747461
https://twitter.com/nogiro_iota/status/1138399715802865665

$
${!?}${!#} /???/?? /????/??? /???/?? /???? /???/???/???? 
/
${!?}
__=<( );! ___=${__%/*}/$?;(. $___)<<<\$\'\\$?$[__=~$?*~$?]$__\\$?$__$?\\$?$[++__+$?]$[--__]\\$?$__$[++__]\'

hiro氏作の難読化シェル芸の解読

hiro氏作の難読化シェル芸の解読
https://hackmd.io/@EjC746Q1REWEpEC57LOAXA/rJ4niQJfr

新方式dateコマンド その1

__=${##};____=$[-(~-(~__))];_____=<(:);___=`.>&${_____%/*}/$__`;___=${___##*.};___=${_____: -(~__):-(~__)}${___:$____+$____:$__}${___:$____:$__};$___ \$\'\\$__${#___}${#___}\\$__${#___}$__\\$__$[-____*~__]$[++____]\\$__$____$[++____]\';

新方式dateコマンド その2

: /\(:;___=${#_};! _______=<(:);__=$?;_______=${_______%/*};____=`.&>$_______/$__`;____=${____##*.};________=${____: -___:__};____=${_______:~__+-___:~-___}${____:___+___:__}${____:___--:__};_____=$__${#____}$___;$____ ${_______: -__}${____:___:__}$________${____::__}

素数が出力される不思議なワンライナー

|:;$____ ______=\$\'\\$_____\\$[++_____]\';! $____ ':(){ '$______'<<<$(___=`'${_______:~__:__}${____:___:__}${______:__}$________\$\'\\$[_____=_____+${_____::___}]\\$[_____+___+___+__]\'' $__`;[ "${___#*: }" = "$__" ]&&$______<<<$__);((__++<-_____*~___))&&:;}';__=$?;:

Add picture from clipboard (Maximum size: 100 MB)