Можно изменить размер разделов с gparted. Старайтесь изменить порядок раздела.
] В оболочке POSIX синтаксис []${t:-2}[
] означает нечто другое - он расширяется до значения []t[
], если []t[
] установлено и не установлено нуля, и в противном случае до значения []2[
]. Для обрезки одного символа с помощью расширения параметра, синтаксис, который вам, вероятно, нужен, составляет []${t%? }[
][
]Обратите внимание, что в []ksh93[
], []bash[
] или []zsh[
], []${t:(-2)}[
] или []${t: -2}[
] (обратите внимание на пробел) []являются[] законными как расширение подстроки, но, вероятно, не являются тем, что вы хотите, так как они возвращают подстроку, начинающуюся с позиции 2 символов в конце (i. e. она удаляет []первый [] символ []i[
] строки []ijk[
]). [
]Смотрите раздел "Расширение параметров оболочки" справочного руководства Bash для получения дополнительной информации:[
] []] С помощью []bash[
] 4. 2 и выше, вы можете сделать:[
${var::-1}
]
[]Пример:[
] [$ a=123
$ echo "${a::-1}"
12
]
[]Заметьте, что для более старых []bash[
] ( например, []bash 3.2.5[
] на OS X), вы должны оставить пробелы между двоеточиями и после них: [
${var: : -1}
] ] для удаления последних []n[
] символов из строки, которая не использует []sed[
] или []awk[
]: [
> echo lkj | rev | cut -c (n+1)- | rev
]
[], например, последний символ []один символ [
] можно удалить, используя следующее:[
> echo lkj | rev | cut -c 2- | rev
> lk
]
[] из меню []rev[
]:[
] [] []DESCRIPTION[
] [
]. Утилита rev копирует указанные файлы в стандартный вывод, изменение порядка символов в каждой строке. Если ни один файл не является специфицированным... fied, считывается стандартный вход.[
]UPDATE:[
] []если вы не знаете длину строки, попробуйте:[
] [$ x="lkj"
$ echo "${x%?}"
lk
] ] Достаточно просто использовать регулярное выражение:[
] [n=2
echo "lkj" | sed "s/\(.*\).\{$n\}/\1/"
] t=lkj
echo ${t:0:${#t}-1}
]
[] Вы получаете подстроку от 0 до длины строки -1. Обратите внимание, однако, что это вычитание специфично для бэша и не будет работать на других оболочках.[
] []Например, []dash[
] не может разобрать даже[
echo ${t:0:$(expr ${#t} - 1)}
]
[]Например, на Ubuntu, []/bin/sh[
] это []dash[
][
Некоторые уточнения. Чтобы удалить более одного символа, вы можете добавить несколько вопросительных знаков. Например, чтобы удалить последние два символа из переменной: $ SRC_IP_MSG
, вы можете использовать:
SRC_IP_MSG=${SRC_IP_MSG%??}
Вы также можете использовать head
, чтобы распечатать все символы, кроме последнего.
$ s='i am a string'
$ news=$(echo -n $s | head -c -1)
$ echo $news
i am a strin
Но, к сожалению, некоторые версии head
не включают опцию ведущего -
. Это относится к головке
, которая поставляется с OS X.
Используя sed, это должно быть так же быстро, как
sed 's/.$//'
Ваш единственный echo тогда echo ljk | sed 's/.$//'
Используя это, 1-строчная строка может быть любого размера.
В зависимости от некоторых параметров в оболочке:
t = $ {t%?}
t = `expr" $ t ": '\ (. * \).'`
t = $ {t [1, -2]}
t = $ {t: 0: -1}
t = $ {t: 0: $ {# t} -1}
t = $ {t /%?}
t = $ {t / ~ (E). $ /}
@ {t = $ 1} ~~ $ t *?
Обратите внимание, что хотя все должны удалить последний ] символа , вы обнаружите, что некоторые реализации (те, которые не поддерживают многобайтовые символы) вместо этого удаляют последний байт (поэтому, вероятно, будет поврежден последний символ, если он был многобайтовым ).
Вариант expr
предполагает, что $ t
не заканчивается более чем одним символом новой строки. Он также вернет ненулевой статус выхода, если результирующая строка окажется 0
(или 000
или даже -0
в некоторых реализациях). Это также может дать неожиданные результаты, если строка содержит недопустимые символы.
Самый переносимый и самый короткий ответ почти наверняка:
$ {t%?}
Это работает в bash, sh, ash, dash, busybox / ash, zsh, ksh и т. д.
Он работает с использованием устаревшего расширения параметров оболочки. В частности, %
указывает на удаление наименьшего совпадающего суффикса параметра t
, который соответствует шаблону глобуса ?
(то есть: любому символу).
См. «Удалить наименьший шаблон суффикса» здесь для (гораздо) более подробного объяснения и дополнительной информации. Также см. Документацию по вашей оболочке (например: man bash
) в разделе «Расширение параметров».
В качестве примечания: если вы хотите вместо этого удалить первый символ , вы должны использовать $ {t #?}
, поскольку #
соответствует из перед строкой (префикс) вместо задней (суффикс).
Также стоит отметить, что и %
, и #
имеют версии %%
и ##
, которые соответствуют самая длинная версия данного паттерна вместо самой короткой. Оба $ {t %%?}
и $ {t ##?}
в этом случае будут делать то же самое, что и их единственный оператор (так что не добавляйте бесполезные лишние персонаж). Это связано с тем, что данный шаблон ?
соответствует только одному символу. Смешайте *
с некоторыми не подстановочными знаками, и все станет более интересным с %%
и ##
.
Понимание расширений параметров или, по крайней мере, знание об их существовании и умение их искать, невероятно полезно для написания и расшифровки сценариев оболочки многих разновидностей. Расширения параметров часто выглядят для многих как загадочная оболочка-вуду, потому что ... ну ... они загадочная оболочка-вуду (хотя довольно хорошо задокументированы, если вы знаете, что нужно искать "расширение параметров"). Тем не менее, определенно хорошо иметь пояс с инструментами, когда вы застряли в снаряде.
Поскольку мы также можем использовать php в командной строке или сценариях оболочки. Иногда это полезно для хирургического разбора.
php -r "echo substr('Hello', 0, -1);"
// Output hell
С трубопроводом:
echo "hello" | php -r "echo substr(trim(fgets(STDIN)), 0, -1);"
// Output hell