В чем разница между этими командами?

В чем разница между этими командами: я использовал cd $HOME/directory/test/ перед запуском каждой строки:

cd ~
cd /
cd ~/
cd -
cd --
cd /.
cd $HOME
cd $USR
cd

И все они выполняют одно и то же поведение. В чем разница?

1
задан 11 July 2017 в 18:36

1 ответ

cd ~

Изменения в вашем домашнем каталоге. ~ в начале пути является аббревиатурой, означающей «домашний каталог пользователя».

cd /

Изменяет корневой каталог /. Здесь нет ничего особенного.

cd ~/

Конечная / не имеет никакого значения. Он заставляет ~ интерпретироваться как каталог, но cd делает это в любом случае. (Конечная / имеет значение для символической ссылки на каталог - сравните ls -ld /var/spool/mail и ls -ld /var/spool/mail/.)

cd -

Изменения в каталоге, в котором вы были до предыдущего . Это особый случай команды cd: когда его аргумент -, он делает это.

cd --

С большинством команд, включая cd, аргумент -- означает, что все, что приходит после этого, будет рассматриваться как операнд, а не вариант. Так, например, cd -- -P означает изменение в каталог с именем -P, тогда как cd -P передает параметр -P (что имеет значение, если путь, по которому вы переходите, проходит через символическую ссылку). Если после -- нет аргументов, -- ничего не делает; эта команда эквивалентна простой cd. cd без аргумента, в свою очередь, является ярлыком для cd ~.

cd /.

Эквивалентен cd /, поскольку /. - это тот же каталог, что и / (. в основном полезен сам по себе, означает «текущий каталог»).

cd $HOME

Изменения в вашем домашнем каталоге. Это не удается, если путь к вашему домашнему каталогу содержит пробел или другие символы. Всегда используйте двойные кавычки вокруг переменных подстановок: cd "$HOME".

cd $USR

По всей вероятности, это ничего не значит, потому что в вашей оболочке не определена переменная с именем USR, поэтому выполняемая команда просто [ f37].

8
ответ дан 24 May 2018 в 06:40
  • 1
    ... пробел или другие символы . как персонажи? – αғsнιη 14 June 2014 в 18:46
  • 2
    Я помню, что в некоторых случаях (скрипты bash) $ HOME / & lt; Some Directory или File & gt; не работал, и мне пришлось использовать / home / $ USER / & lt; Some Directory или Файл & gt; . Это также верно для ~ / & lt; Some Directory или File & gt; Таким образом, должны существовать определенные различия, когда желательно использовать один, а не другой (чего я не знаю) - я ошибаюсь? – Sadi 14 June 2014 в 18:51
  • 3
    @KasiyA $foo внешние кавычки управляют строками, которые содержат пробельные символы или подстановочные знаки: \[*? (и многое другое в некоторых конфигурациях оболочки). – Gilles 14 June 2014 в 18:56
  • 4
    @Sadi В сценарии bash "$HOME" всегда работает как домашний каталог вызывающего пользователя. "/home/$USER" делает то же самое, только если домашний каталог пользователя находится в этом месте (что не всегда относится к институциональным сетям). Если вам не нужно что-то делать с настройкой конкретной установки, /home/$USER никогда не будет прав. – Gilles 14 June 2014 в 18:58

Другие вопросы по тегам:

Похожие вопросы: