シェル変数から先行および末尾のスペースを削除する方法

シェル変数から先行および末尾のスペースを削除する方法

先頭と末尾のスペースを持つ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つの変数が可能です。

おすすめ記事