Если вам нужен текстовый режим для изменения размера разделов, вы можете попробовать parted: https://www.centos.org/ docs / 5 / html / 5.2 / Deployment_Guide / s2-disk-storage-parted-resize-part.html
Для этого и созданы функции:
print_if_not_regular() {
[ -f "$1" ] || printf '%s\n' "$1"
}
print_if_not_regular /root/.bash_aliases
Некоторые оболочки, такие как es
или zsh
, имеют анонимные функции:
(){[ -f "$1" ] || printf '%s\n' $1} /root/.bash_aliases # zsh
@ {[ -f $1 ] || printf '%s\n' $1} /root/.bash_aliases # es
Я бы не стал использовать $_
. Это больше не работает, например, если у вас есть ловушка DEBUG.
$ bash -c 'trap ": \"\$((cmdcount+=1))\"" DEBUG; echo foo; echo "$_"'
foo
2
Обратите внимание, что !:n
— это не n й аргумент последней команды, а n й лексический токен предыдущей командной строки (последней строки (возможно, даже многострочный )сохраняется в истории ). Например, в
echo $(echo A B)
echo foo; echo !:1
Что !:1
не расширяется доfoo
(последнего аргумента последней команды )иB
(последнего аргумента echo
из команды echo
предыдущей командной строки ). ], но $(echo A B)
. Здесь вам нужно будет ввести:
[ -f /root/.bash_aliases ] ||
echo !:2
То есть введите его на отдельных строках. Здесь,случается, что (он работает случайно ), даже если строка истории не полностью завершена к тому времени, когда вы вводите вторую строку. Тот же трюк не работает ни в (t)csh
(, где расширения истории происходят из ), ни zsh
.
Используйте
test -f /root/.bash_aliases || echo "$_"
или
test -f /root/.bash_aliases || printf '%s\n' "$_"
$_
расширится до последнего аргумента предыдущей команды. В вашем примере предыдущая команда — [
, а ее последний аргумент — ]
.
Выше последняя команда — test
, а ее последний аргумент — имя файла.
test
и [
— это одни и те же команды, но [
требует ]
в качестве последнего аргумента командной строки. В данном случае именно это затрудняет использование $_
для получения имени файла.
Вышеприведенное решение работает как минимум в bash
(, если у вас нет DEBUG
набора ловушек )и zsh
.
Если у вас есть имя файла в переменной, это было бы тривиально сделать
[ -f "$name" ] || printf '%s\n' "$name"
или
if [ ! -f "$name" ]; then
printf '%s\n' "$name"
fi
в зависимости от ваших предпочтений для операторов if
и коротких -логических тестов схемы.