iCloud のストレージは Mac では /Users/…/Library/Mobile\ Documents/com\~apple\~CloudDocs というディレクトリにマウントされる. このディレクトリ名のなかに空白があるために shell (bash) でそれが 2 個の文字列に分割されてしまってエラーになる. なぜこんなおかしな名前をつけたのか…
このディレクトリ名は空白が "\" で escape されていればその場ではひとつの文字列とみなされて,cd などのコマンドでうまくあつかえる. 上記のディレクトリ名はそうなっている. ところが,それが shell script にわたされると,escape (\) がきえてしまう. そのため,そのディレクトリ名を shell script 内でべつのコマンドにわたそうとしても,うまくいかない. べつのコマンドになんとか escape された空白をわたそうとしたが,うまくいかない. 空白に "\" をつけても 2 つの文字列に分割されてしまう.
しかたがないのでコマンドを実行するディレクトリ内に Documents という symbolic link をつくった. そのリンク先が /Users/yk/Library/Mobile\ Documents だ. こうしておいて /Users/yk/Library/Mobile\ Documents のサブディレクトリやその下のファイル名を cmd という script にわたす (そのなまえを /Users/yk/Library/Mobile\ Documents/FILE とする).cmd はそれを cmd_1 という script にそのままわたす. cmd はそのディレクトリ名/ファイル名を 1 個の文字列としてうけとるが,cmd_1 はそれが 2 個に分割されたものをうけとる. そこで cmd_1 は最初の文字列 ($1 その内容は "/Users/yk/Library/Mobile") は無視して 2 番めの文字列 ($2 その内容は "Documents/FILE") をあつかう. この文字列の先頭は "Documents" だが,それは /Users/yk/Library/Mobile\ Documents にリンクされているので,意図したディレクトリやファイル (/Users/yk/Library/Mobile\ Documents/FILE) をうけとることができる.
なんでこんなめんどうなことをさせられるのか ?!