- ベストアンサー
シェルスクリプトで複数の引数を渡す方法
- シェルスクリプトで複数の引数を渡す方法について質問しています。
- 現在、ファイル名と拡張子の形で複数行からなる2つの引数を渡す方法を試していますが、うまくいっていません。
- パイプ処理やファイル保存を試しましたが、引数が1つずつしか渡らない状況です。どのようにすれば複数の引数を渡せるでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
別解を、ワンライナーで、 for f in *.{jpg,png,gif,bmp,jpeg};do echo ${f%.*} ${f#*.};done
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
OS (というか find) によっては find . -maxdepth 1 -mindepth 1 -name '*{.gif,.bmp,.jpg,.jpeg,.png}' | sed -e 's=^./==; s/\./ /; s=^=bash ./echo.sh =' | bash のようにコマンドを組み立てる変態的な操作も可能. 最初の find は ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} とだいたい同じなんだけど, たくさんファイルがある状況では find じゃないとうまくいかない.
お礼
おっしゃり通り変態的ですねw findの解説もさることながらsedの部分が変態すぎますw でも、参考になります。 ありがとうございます
- kumoz
- ベストアンサー率64% (120/185)
> system("bash ./echo.sh $name[0] $name[1]"); シェルスクリプトでの $1, $2, ... はコマンドラインの引数なので、上記の文はうまく行くのだと思います。パイプで渡した場合は、標準入力から読み取りなので read 等で処理する必要があるのでは、 $ cat echo.sh IFS=. while read name ext; do echo $name $ext done
お礼
bashのreadは1行ずつ読むんですね。 ありがとうございます。
- MillenniuM
- ベストアンサー率58% (42/72)
こうではどうでしょうか。 http://pastebin.com/SihsLKk6
お礼
早々にお教え頂きありがとうございます。 期待していたのは、コマンドラインから1ライナーでパイプでつなげるやり方があるのかな・・・という思いでしたが、ご教授頂きありがとうございます。 なるほどですね~ 変数に拡張子を登録しておいて 後から「変数に対するパターンマッチ」箇所で使うんですね。 今回の調べものの途中 http://www.atmarkit.co.jp/ait/articles/0202/05/news001.html を読んでいて、ほうほう「変数に対するパターンマッチ」というのがあるんだぁ~なるほど~。と思っていた所、ちょうどタイムリーでした。 for file in *.${ext}箇所と${file%.${ext}}箇所の工夫が、また一歩上達の道を歩めました。 ありがとうございます。
お礼
ワンライナーで実現頂きありがとうございます。 変数に対するパターンマッチで、実現されてる辺り恐れ入ります。 ありがとうございます。