Что делает $ {0% / *} в сценариях оболочки?

На самом деле нет необходимости вытирать жесткий диск. Либо продолжайте работать с установленной ОС, либо просто установите другую, решив стереть диск во время установки.

Тем не менее, Ubuntu, как кто-то, кто пробовал около десятка дистрибутивов, будет намного проще настроить и использовать для новичка.

16
задан 7 January 2018 в 04:43

3 ответа

${0} - первый аргумент скрипта, то есть имя или путь к сценарию. Если вы запустите свой скрипт как path/to/script.sh, то ${0} будет именно такой строкой: path/to/script.sh.

Часть %/* изменяет значение ${0}. Это означает: взять все символы до /, а затем имя файла. В приведенном выше примере ${0%/*} будет path/to.

Вы можете увидеть его в действии на своей оболочке:

$ x=path/to/script.sh
$ echo "${x%/*}"
path/to

Sh поддерживает многие другие виды «замены параметров» ». Вот, например, как взять имя файла вместо пути:

$ echo "${x##*/}"
script.sh

В общем, суффиксы % и %%, в то время как префиксы # и ## , Вы можете больше узнать о замене параметров.

27
ответ дан 22 May 2018 в 15:42
  • 1
    Это "|| выход 1 " кажется ненужным: если теперь будет изменено dir $? равно 1. – Josef Klimuk 7 January 2018 в 10:02
  • 2
    Было бы неплохо отметить, что конструкция документирована как «Удалить соответствующий префикс / шаблон суффикса», в руководстве. Также замечательный способ запомнить, что такое # - сдвиг 3 ( слева of $),% - сдвиг 5 ( справа of $), по крайней мере, в США клавиатура. – chexum 7 January 2018 в 12:46
  • 3
    @JosefKlimuk: || exit 1 может потребоваться , потому что cd может выйти со статусом 2, а не 1, при ошибке. Однако я согласен, что это не очень полезно (обычно программы не заботятся о конкретных статусах выхода). Вероятно, это часть более крупного сценария? – Andrea Corbellini 7 January 2018 в 14:12
  • 4
    @AndreaCorbellini Конечно. Практически единственный способ, которым он может быть полезен, - это часть более крупного сценария. Сценарий, который просто изменяет текущий каталог, не влияет, поскольку он влияет только на оболочку, запускающую этот сценарий. Родительский процесс никогда не видит этого. – hvd 7 January 2018 в 15:02

${0} - первый аргумент скрипта, то есть имя или путь к сценарию. Если вы запустите свой скрипт как path/to/script.sh, то ${0} будет именно такой строкой: path/to/script.sh.

Часть %/* изменяет значение ${0}. Это означает: взять все символы до /, а затем имя файла. В приведенном выше примере ${0%/*} будет path/to.

Вы можете увидеть его в действии на своей оболочке:

$ x=path/to/script.sh $ echo "${x%/*}" path/to

Sh поддерживает многие другие виды «замены параметров» ». Вот, например, как взять имя файла вместо пути:

$ echo "${x##*/}" script.sh

В общем, суффиксы % и %%, в то время как префиксы # и ## , Вы можете больше узнать о замене параметров.

27
ответ дан 17 July 2018 в 23:42

${0} - первый аргумент скрипта, то есть имя или путь к сценарию. Если вы запустите свой скрипт как path/to/script.sh, то ${0} будет именно такой строкой: path/to/script.sh.

Часть %/* изменяет значение ${0}. Это означает: взять все символы до /, а затем имя файла. В приведенном выше примере ${0%/*} будет path/to.

Вы можете увидеть его в действии на своей оболочке:

$ x=path/to/script.sh $ echo "${x%/*}" path/to

Sh поддерживает многие другие виды «замены параметров» ». Вот, например, как взять имя файла вместо пути:

$ echo "${x##*/}" script.sh

В общем, суффиксы % и %%, в то время как префиксы # и ## , Вы можете больше узнать о замене параметров.

27
ответ дан 24 July 2018 в 17:05

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

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