ubuntu bashスクリプトで、1つの変数からスペースを削除する方法
文字列は
3918912k
すべての空白を削除したい。
ツールsed
またはtr
は、空白を何も交換しないことでこれを行います
sed 's/ //g'
tr -d ' '
例:
$ echo " 3918912k " | sed 's/ //g'
3918912k
シェルでこれを試してください:
var=" 3918912k"
echo ${var//[[:blank:]]/}
[[:blank:]]
POSIX 正規表現クラス (スペースやタブを削除...) です。http://www.regular-expressions.info/posixbrackets.htmlを参照してください。
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's 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
実際に使用するのではなく、面白いという理由だけでこの回答を投稿しました。