Ответ 1
Вы можете делать (без кавычек при назначении переменной):
a=~/Foo
cd "$a"
Но в этом случае переменная $a
не сохранит ~/Foo
, а расширенную форму /home/user/Foo
. Или вы можете использовать eval
:
a="~/Foo"
eval cd "$a"
Скажем, у меня есть папка с именем 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";
Если вы используете двойные кавычки, символ ~ будет сохранен как этот символ в $a.
cd $a не будет расширять значение ~, так как значения переменных не расширяются оболочкой.
Решение:
eval "cd $a"
Более надежным решением было бы использовать нечто вроде sed или даже лучше, расширение параметра bash:
somedir="~/Foo/test~/ing";
cd ${somedir/#\~/$HOME}
или если вы должны использовать sed,
cd $(echo $somedir | sed "s#^~#$HOME#")