Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

シェルスクリプトの関数の引数として文字列をわたすと行頭スペースが勝手にパースされたりする件

……printfやechoで、行頭のスペースが消されて見えなくなるというあれが。
スクリプトの方はちゃんと整形していても、出力でお節介されたらたまりません。

shunit2でテストをやろうとした時、先頭にスペースがあって然るべき文字列として渡しても、
スペースを削除して勝手に整形されてしまうので用意したテスト結果と一致しないという事態が発生します。

この場合、テスト結果と実行体を同じ表示形式で読むなりの工夫が必要になってきます。

$ echo -n " 123" 
 123

$ echo -n " 123" | hexdump 
0000000 20 31 32 33                                    
0000004

$ printf " 123" | hexdump 
0000000 20 31 32 33                                    
0000004

$ echo `echo -n " 123"` | hexdump 
0000000 31 32 33 0a                                    
0000004

$ echo -n `echo -n " 123"` | hexdump 
0000000 31 32 33                                       
0000003

$ printf `echo -n " 123"` | hexdump 
0000000 31 32 33                                       
0000003

$ hexdump <<< `echo -n " 123"` 
0000000 31 32 33 0a                                    
0000004

$ hexdump <<< "`echo -n " 123"`" 
0000000 20 31 32 33 0a                                 
0000005