home | list info | list archive | date index | thread index

Re: expansion of tilde for home directory

On Thu 2021-06-17 10:55:27 -0400, J C Nash wrote:
> While I've found a workaround, I was a bit surprised that a test for existence of
> a directory in a bash script did not work.

This is POSIX shell in general.

> I tried
>
> DIR="~/Something/"

Just DIR="$HOME/Something" unless you need to refer to someone else's
home.

> if [ -d "$DIR" ]; then

Heck, I'd just if [ -d ~/Something ]; then

> and got that the directory did NOT exist when it was clearly there.
>
> Workaround was to use
>
> DIR="/home/$(basename ~)/Something/"
>
> I did a bit of a search, but found no mention of the fact that ~ is not
> expanded in the if [  ] construct. Is it, in fact, "well-known" except
> to me?

It's because the tilde is in quotes.

See 2018 POSIX shell command language ยง 2.6.1 Tilde Expansion

    A "tilde-prefix" consists of an unquoted <tilde> character at the
    beginning of a word, followed by all of the characters preceding the
    first unquoted <slash> in the word, or all the characters in the
    word if there is no <slash>.

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_01

Your tilde in your command substitution is unquoted, which is why it
works.

To unsubscribe send a blank message to linux+unsubscribe [ at ] linux-ottawa [ dot ] org
To get help send a blank message to linux+help [ at ] linux-ottawa [ dot ] org
To visit the archives: https://lists.linux-ottawa.org