30183


a.png~z.pngまでの一文字のアルファベットのファイル名を持つ画像ファイルがあります。  
文字列を渡して実行すると、指定したアルファベットの文字列の順番どおりに、対応する画像ファイルを結合して出力するシェルスクリプトを書きたいです。

実行例

[code]

    ./createImage.sh zyxwv
    
[/code]

このように結合される

[code]

    convert +append z.png y.png x.png w.png v.png result.png  
    
[/code]

どのように書けばいいのでしょうか。  
詳しい方教えてください。  
よろしくお願いいたします。


CC BY-SA 3.0
2016-11-07T08:59:53.210
30180
2016-11-07T11:02:01.793
8825
question
shellscript
指定した文字列どおりに対応する画像ファイルを結合するシェルスクリプト


`${変数#パターン}` → 最少の前方一致部分を削除  
`${変数%パターン}` → 最少の後方一致部分を削除

を使って、文字が残っている間は1文字ずつ切り出して行くというやり方です。

[code]

    #!/bin/sh
    chars=$1
    test -z $chars && exit 1
    command="convert +append"
    while [ -n "$chars" ]; do
      rest=${chars#?}
      char=${chars%$rest}
      chars=$rest
      command="$command $char.png"
    done
    command="$command result.png"
    $command
    
[/code]


CC BY-SA 3.0
2016-11-07T09:29:50.070
30183
2016-11-07T09:29:50.070
17037
30180
answer


別解として sed を使う方法など。

[code]

    #!/bin/sh
    
    [ -z "$1" ] && exit 0
    
    convert +append $(echo "$1" | sed 's/./&.png /g') result.png
    
[/code]


CC BY-SA 3.0
2016-11-07T10:13:19.790
30185
2016-11-07T10:13:19.790
30180
answer


1文字なら大丈夫かもしれませんが、2文字毎、3文字毎と拡張していってファイルが本当に馬鹿みたいに多くなるとconvertの引数がコマンドラインの上限に達するかもしれません。`@`オペレータでSTDINから読んだ方がいいかも。

[code]

    #!/bin/bash
    
    [ -z "$1" ] && exit 0
    echo "$1" | fold -w1 | lam - -s '.png' | convert +append @- result.png
    
[/code]

`lam`コマンドが無ければ @metropolis さんのようにsedで。


CC BY-SA 3.0
2016-11-07T11:02:01.793
30187
2016-11-07T11:02:01.793
62
30180
answer