Почему zsh позволяет имени быть пустым в $ {name:-слово}?

Если Вы не запустите Windows или RHEL5 в виртуальной машине, это не будет работать. Как только Вы завершаете работу своего компьютера для начальной загрузки в, Вы - изображение Windows сервисные остановки Samba.

То, что можно сделать, создают третий раздел, который Windows распознает и который может смонтировать Linux. Шаг со стороны инструкций здесь: http://www.howtogeek.com/howto/35807/how-to-harmonize-your-dual-boot-setup-for-windows-and-ubuntu/

2
26.01.2015, 22:00
2 ответа

У меня нет объяснения Почему они сделали это таким образом, но $ {: - Foo ...} У него есть приложение: он считается подсчетом параметра в местах, которые синтаксически требуют одного, но всегда просто расширяется до буквенного выпуска. Вы можете написать такие вещи, как это использовать флаги расширения или или Другие спецификаторы расширения на буквальной строке на месте:

$ echo ${(#)${=${:-65 66 67}}}
A B C
$ echo ${(q)${:-hello world!}}
hello\ world\!

Вы также можете использовать другие расширения внутри вашего Слово Строка :

$ restofarglist=arg3,arg4
$ echo ${${:-arg1,arg2,$restofarglist}//,/ }

Все это поведение документируется вправо в конце раздела на расширении параметра :

, если $ {...} Выражение параметра типа или $ (...) $ (...) Подстановка команды типа используется вместо имя выше, он сначала расширяется, и результат используется как если бы это было Значение имя .

Вы можете гнездиться этими расширениями произвольно глубоко, хотя они справедливо становится непонятными. Существуют странные угловые случаи вокруг использования $ {name = Word} семейство расширений внутри обеих сторон.

Это довольно тупой способ делать вещи в целом, но это как единственное приложение, которое я знаю для $ {: -} , и единственный способ сделать эти вещи, не создавая другую переменную. Документация определенно может быть более четкой, хотя все биты технически там.

3
27.01.2020, 21:54

Другим способом было бы проверить возраст процесса, прежде чем убить его. Таким образом, вы можете убедиться, что вы не убиваете процесс, который не вырезан менее чем за 24 часа. Вы можете добавить , если состояние на основе этого перед убийством процесса.

if [[ $(ps -p $p -o etime=) =~ 1-. ]] ; then
    kill $p
fi

Это Если условие проверит, будет ли идентификатор процесса $ p меньше 24 часов (86400 секунд).

PS: - Команда ps -p $ p-etime = будет иметь формат -HH: MM: SS

-121--11384-

В сочетании с другими функциями расширений параметров это позволяет сделать несколько уютных трюков.

Пара примеров:

# strftime date via prompt sequences
tar -cpf ${(%):-%D{%Y%m%d}}-/etc.tar /etc
# brace expansion, but separated by commas via PE flags and nesting PEs.
print ${(j:,:)${:-{1..10}}}
3
27.01.2020, 21:54

Теги

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