21055


`~/Library/Application Support/`

のようにスペースを含んだファイルパスを

[code]

    $ path="~/Library/Application Support/"
    $ [ -e "$path" ] && echo Found || echo Not Found
    
[/code]

のように存在するか判定したいのですが、これを実行すると

`Not Found`

とファイルおよびディレクトリが見つからなかったと表示されてしまいます。  
スペースを含んだファイルパスが存在するかどうか確かめるうまい方法はありませんか


CC BY-SA 3.0
2016-01-19T05:59:27.180
21053
2016-01-20T03:18:55.637
2016-01-19T06:30:24.223
5505
5505
question
linux shellscript
スペースを含んだファイルパス存在するか確かめたい


変数をクオートで囲みます。

[code]

    $ test -e "$path"
    
[/code]

（追記）

「~」が展開されないというご指摘が有ったので別解として書きます。

[code]

    $ path="~/Library/Application Support/"
    $ ls -1 "$path" >/dev/null 2>&1 && echo "Found" || echo "Not Found"
    
[/code]

わかりにくければ eval を使うと `~` を展開出来ます。

[code]

    [ -e "$(eval "echo $path")" ] && echo "Found" || echo "Not Found"
    
[/code]


CC BY-SA 3.0
2016-01-19T06:04:06.133
21054
2016-01-19T14:24:56.883
2016-01-19T14:24:56.883
5008
5008
21053
answer


`test -e "$HOME/Library/Application Support/"`

これでどうでしょう。


CC BY-SA 3.0
2016-01-19T06:15:23.277
21055
2016-01-19T06:15:23.277
13999
21053
answer


ダブルクォートで囲まれた内部で `~(tilde)` が展開されない事について少し。

> **bash(1)**
>
> **QUOTING**
>
> Enclosing characters in double quotes **preserves the literal value** of all
> characters within the quotes, **with the exception of $, `, \, and, when
> history expansion is enabled, !**.
[code]

    $ echo ~
    /home/nemo
    $ echo "~"
    ~
    
[/code]

上記は bash についてですが、POSIX complient な shell 全てに当てはまります。

[Shell Command Language - 2.2.3 Double-
Quotes](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02_03)


CC BY-SA 3.0
2016-01-19T08:21:07.583
21065
2016-01-19T08:21:07.583
21053
answer


すでに回答があるようにダブルクォートでエスケープするとチルダ展開は実行されないので、次のようにしましょう。

[code]

    $ path=~"/Library/Application Support/"
    $ [ -e "$path" ] && echo Found || echo Not Found
    
[/code]

この書き方ならば、自分以外のユーザーでも OK です。

[code]

    $ path=~username"/Library/Application Support/"
    $ [ -e "$path" ] && echo Found || echo Not Found
    
[/code]


CC BY-SA 3.0
2016-01-20T03:18:55.637
21103
2016-01-20T03:18:55.637
3061
21053
answer