先頭と末尾のスペースを持つtablenameという変数があります(例:
tablename= yyy
)。先行スペースと末尾のスペースを削除したい(出力:
tablename=yyy
)そしてシェルスクリプトを使用してスペースを残さずにこの変数をファイルに書き込みます。
答え1
var=' A B C '
そしてzsh
:
trim=${${var%${var##*[^[:blank:]]}}#${${var%${var##*[^[:blank:]]}}%%[^[:blank:]]*}}
printf '++%s++\n' $trim
++AB C++
そしてbash
:
shopt -s extglob
trim=${var%%*([[:blank:]])}
trim=${trim##*([[:blank:]])}
printf '++%s++\n' "$trim"
++AB C++
すべてのシェルに対して追加の変数を使用して、先行スペースと末尾のスペースを保持できます1 (基本的には同じソリューションですが入れ子にzsh
なっていません):
trail=${var##*[^[:blank:]]} # get trailing space
var=${var%${trail}} # remove trailing space
lead=${var%%[^[:blank:]]*} # get leading space
trim=${var#${lead}} # remove leading space
printf '++%s++\n' "$trim"
++AB C++
1:明確にするために、ここでは2つの変数を使用して前のスペースと末尾のスペースを別々に保持しますが、1つの変数が可能です。
答え2
与えられたように他サイトの投稿:
tablename=${tablename// }
答え3
このread
コマンドは、先頭と末尾の空白文字をトリムします(値として定義されていますIFS
)。スペースをトリミングするためにここのドキュメントで使用できます。
IFS=' ' read tablename <<EOF
$tablename
EOF
bash(Xシェルブランドではない)を使用している場合は、ここにあるドキュメントの代わりにここにある文字列を使用して単純化できます。
IFS=' ' read tablename <<<"$tablename"
この割り当ては$IFS
コマンドのプレフィックスなので、read
そのコマンドにのみ適用され、後でリセットする必要はありません。また、混乱せずに$IFS
タブやスペースを切り取りたい場合は、IFS
まったく設定する必要はありません。
答え4
echo "tablename =yyy" | tr -d ' '
tablename=yyy