• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:shellスクリプトに複数の引数を渡したい)

シェルスクリプトで複数の引数を渡す方法

このQ&Aのポイント
  • シェルスクリプトで複数の引数を渡す方法について質問しています。
  • 現在、ファイル名と拡張子の形で複数行からなる2つの引数を渡す方法を試していますが、うまくいっていません。
  • パイプ処理やファイル保存を試しましたが、引数が1つずつしか渡らない状況です。どのようにすれば複数の引数を渡せるでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

別解を、ワンライナーで、 for f in *.{jpg,png,gif,bmp,jpeg};do echo ${f%.*} ${f#*.};done

taku0
質問者

お礼

ワンライナーで実現頂きありがとうございます。 変数に対するパターンマッチで、実現されてる辺り恐れ入ります。 ありがとうございます。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

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 じゃないとうまくいかない.

taku0
質問者

お礼

おっしゃり通り変態的ですねw findの解説もさることながらsedの部分が変態すぎますw でも、参考になります。 ありがとうございます

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

> system("bash ./echo.sh $name[0] $name[1]"); シェルスクリプトでの $1, $2, ... はコマンドラインの引数なので、上記の文はうまく行くのだと思います。パイプで渡した場合は、標準入力から読み取りなので read 等で処理する必要があるのでは、 $ cat echo.sh IFS=. while read name ext; do echo $name $ext done

taku0
質問者

お礼

bashのreadは1行ずつ読むんですね。 ありがとうございます。

回答No.1

こうではどうでしょうか。 http://pastebin.com/SihsLKk6

taku0
質問者

お礼

早々にお教え頂きありがとうございます。 期待していたのは、コマンドラインから1ライナーでパイプでつなげるやり方があるのかな・・・という思いでしたが、ご教授頂きありがとうございます。 なるほどですね~  変数に拡張子を登録しておいて 後から「変数に対するパターンマッチ」箇所で使うんですね。 今回の調べものの途中 http://www.atmarkit.co.jp/ait/articles/0202/05/news001.html を読んでいて、ほうほう「変数に対するパターンマッチ」というのがあるんだぁ~なるほど~。と思っていた所、ちょうどタイムリーでした。 for file in *.${ext}箇所と${file%.${ext}}箇所の工夫が、また一歩上達の道を歩めました。 ありがとうございます。

関連するQ&A