シェルスクリプトの質問です。

どうも $@ の扱いがよくわからないのです。最後の($#番目の)引数ってどうやって除去するんだろう?
(perl でいうところの pop @_ をやりたいのです)
cp とか mv とか、最後の引数だけ他とは違う扱いをするコマンドを書こうとしているのですが、うまい方法を思いつきません。そういうのはシェルスクリプトではやっぱり無理でしょうか‥

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:kimizu No.1

回答回数726ベストアンサー獲得回数21

ポイント50pt

Cシェルでよいでしょうか。

引数の処理、の部分で引数の個数が取れるので、

while-endで回しつつ、if文とかはどうですか?

id:hubris

ありがとうございます。やっぱり個数を評価するしかないですかねぇ(Bシェルだとそれすら面倒だったり)。

2005/12/06 19:59:12
id:hyoshiok2 No.2

回答回数1ベストアンサー獲得回数0

ポイント70pt

こんなのどうでしょう(bashの場合)。

ただし、$IFSの値がスペースでない場合は

「ALL_ARGS%」の後のスペースを

$IFSの先頭の文字に換える必要がありますが…


ALL_ARGS=”$*”

echo ${ALL_ARGS% *}


${@% *}とやると別の意味になってしまうので

ALL_ARGSで一度受けてます。

id:hubris

あ、‥すごいんですね bash の Parameter Expansion て‥

ていうか私が B shell のトークナイザの動作をちゃんと理解してないことを思い知らされたというか‥

(echo | sed を backtick で囲む、というワザは多用してまして、これでもたぶん同じことができますね、なるほど)

2005/12/06 20:27:03

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません