人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: hubris
●カテゴリ:コンピュータ
✍キーワード:CP MV Perl POP うまい
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kimizu
●50ポイント

http://hp.vector.co.jp/authors/VA012953/unix/cs_shell.html

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

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

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

◎質問者からの返答

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


2 ● hyoshiok2
●70ポイント

http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html

Manpage of BASH

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

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

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

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


ALL_ARGS=”$*”

echo ${ALL_ARGS% *}


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

ALL_ARGSで一度受けてます。

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ