В ubuntu bash script как удалить пробел из одной переменной
Строкабудет
3918912k
Хотите удалить все пустое пространство.
В ubuntu bash script как удалить пробел из одной переменной
Строкабудет
3918912k
Хотите удалить все пустое пространство.
Попробуйте сделать это в оболочке:
s=" 3918912k"
echo ${s//[[:blank:]]/}
Это использует расширение параметра
[[:blank:]]
- это класс PREIX regex (удалять пробелы, вкладки...), см. http://www.regular-expressions.info/posixbrackets.html
Инструменты sed
или tr
сделают это для вас, заменив пробелы ничем.
sed 's/ //g'
tr -d ' '
Пример:
$ echo " 3918912k " | sed 's/ //g'
3918912k
Вы также можете использовать echo
для удаления пробелов, либо в начале, либо в конце строки, но также повторяя пробелы внутри строки.
$ myVar=" kokor iiij ook "
$ echo "$myVar"
kokor iiij ook
$ myVar=`echo $myVar`
$
$ # myVar is not set to "kokor iiij ook"
$ echo "$myVar"
kokor iiij ook
Поскольку вы используете bash, самым быстрым способом будет:
shopt -s extglob # Allow extended globbing
var=" lakdjsf lkadsjf "
echo "${var//+([[:space:]])/}"
Это быстрее, потому что он использует встроенные функции вместо запуска дополнительных процессов.
Однако, если вы хотите сделать это с помощью POSIX-совместимого способа, используйте sed
:
var=" lakdjsf lkadsjf "
echo "$var" | sed 's/[[:space:]]//g'
Смешной способ удалить все пробелы из переменной - использовать printf:
$ myvar='a cool variable with lots of spaces in it'
$ printf -v myvar '%s' $myvar
$ echo "$myvar"
acoolvariablewithlotsofspacesinit
Оказывается, он немного эффективнее, чем myvar="${myvar// /}"
, но не безопасен в отношении глобусов (*
), которые могут появляться в строке. Поэтому не использовать его в производственном коде.
Если вы действительно действительно хотите использовать этот метод и действительно беспокоитесь о том, что вы делаете глобусы (и вам действительно нужно), вы можете использовать set -f
(который полностью отключает глобальное):
$ ls
file1 file2
$ myvar=' a cool variable with spaces and oh! no! there is a glob * in it'
$ echo "$myvar"
a cool variable with spaces and oh! no! there is a glob * in it
$ printf '%s' $myvar ; echo
acoolvariablewithspacesandoh!no!thereisaglobfile1file2init
$ # See the trouble? Let fix it with set -f:
$ set -f
$ printf '%s' $myvar ; echo
acoolvariablewithspacesandoh!no!thereisaglob*init
$ # Since we like globbing, we unset the f option:
$ set +f
Я отправил этот ответ только потому, что это забавно, а не использовать его на практике.