という名前のフォルダーがFoo
あるとします/home/user/
(私/home/user
も で表され~
ます)。
変数を持ちたい
a="~/Foo"
そして、する
cd $a
私は得る
-bash: cd: ~/Foo: No such file or directory
しかし、私がやるだけならうまくいきcd ~/Foo
ます。これを機能させる方法の手がかりはありますか?
という名前のフォルダーがFoo
あるとします/home/user/
(私/home/user
も で表され~
ます)。
変数を持ちたい
a="~/Foo"
そして、する
cd $a
私は得る
-bash: cd: ~/Foo: No such file or directory
しかし、私がやるだけならうまくいきcd ~/Foo
ます。これを機能させる方法の手がかりはありますか?
あなたがすることができます(変数の割り当て中に引用符なしで):
a=~/Foo
cd "$a"
ただし、この場合、変数$a
は格納されません~/Foo
が、展開されたフォームが格納され/home/user/Foo
ます。または、次を使用できますeval
。
a="~/Foo"
eval cd "$a"
チルダの代わりに を使用できます$HOME
(チルダはシェルによって の内容に展開されます$HOME
)。例:
dir="$HOME/Foo";
cd "$dir";
はるかに堅牢なソリューションは、sed またはさらに優れた bash パラメーター展開のようなものを使用することです。
somedir="~/Foo/test~/ing";
cd "${somedir/#\~/$HOME}"
または、sed を使用する必要がある場合は、
cd $(echo "$somedir" | sed "s#^~#$HOME#")
二重引用符を使用すると、~ はその文字として $a に保持されます。
変数値はシェルによって展開されないため、 cd $a は ~ を展開しません。
解決策は次のとおりです。
eval "cd $a"