実行開始時刻が分かるシェルスクリプト

bashの練習です。
$@または$*を使えば、引数を全て引用できます。

date_ () { date && $@ ;}

または

date_ () { date && $* ;}

です。
実行してみます。

$ date_ ls -l
2014210日 月曜日 170252秒 JST
total 1744
drwx------+   7 riocampos  staff     238 11 18 17:58 Applications
drwx------+  51 riocampos  staff    1734  2 10 03:00 Desktop
drwx------+  19 riocampos  staff     646  2  2 14:58 Documents
drwx------+ 150 riocampos  staff    5100  2  7 14:39 Downloads
drwx------@  35 riocampos  staff    1190  2  9 14:00 Dropbox
drwx------+  58 riocampos  staff    1972  2  6 23:23 Library
drwx------+  11 riocampos  staff     374  1 25 18:15 Movies
drwx------+   8 riocampos  staff     272 12  1 18:40 Music
drwx------+  10 riocampos  staff     340 11 25 14:47 Pictures
drwxr-xr-x+   5 riocampos  staff     170  3 18  2013 Public
drwxr-xr-x+   5 riocampos  staff     170  3 18  2013 Sites

$@と$*のちがいは

今回の使い方では違いが出ません。引用符に括った("$@" / "$*")ときに違ってくるとのこと。

位置パラメータのリストを表す変数$*と$@には $1 $2 $3… という形式で値が保持されているが、両者には少し使用方法に違いがある。
まず、$*と$@は、ダブルクォーテーション(")で囲まれていない場合、両者に違いはない。
位置パラメータに$1=a, $2=b, $3=cと三つの値がある場合、" で囲まれている場合、$*は "a b c" と一つの文字列として展開される。それに対し、$@は"a" "b" "c"とダブルクォーテーションで囲まれた三つの文字列として扱われる。
$*と$@の違い - 技術整備

  • $*

シェルの予約変数IFSに値をセットしておくと、区切り文字を変更することができます。この場合はダブルクオーテーション(")で囲む必要があります。例えば以下のように使用できます。

$ IFS=:
$ echo "$*"
a:b:c:d
  • $@

上記「$*」とほとんど同じですが、予約変数「IFS」の影響は受けません。つねに区切り文字は空白です。
上記「@」と「*」は上記で紹介したbash version2.0 の機能である配列変数にも応用できます。

$ IFS=:
$ array=(a b c d)
$ echo "${array[*]}"
a:b:c:d

$ echo "${array[@]}
a b c d

bash $*と$@の違い - おぼえがき