タブ文字を削除するためのBashパラメータの拡張

タブ文字を削除するためのBashパラメータの拡張

私のスクリプトには次の行があります。

TATVAR=$(echo $PARAMVAR|sed -e 's/^[ \t]*//')

追加のプログラム(sed)を実行しないようにスコープを絞り込み、shellcheckは以下を使用する必要があることを示唆しています。

${variable//search/replace}

正規表現をたくさん試しましたが、うまくいかないようです。これを行う方法を知っている人はいますか?

ベストアンサー1

これは使用できますが、"${PARAMVAR//$'\t'/}"これはbash機能なので、他のシェルではサポートされていない可能性があります。これはスクリプトです#!/bin/bash#!/bin/sh欲しくない)を使用してsh scriptname実行します。

$ PARAMVAR=$'space: tab:\tlinefeed:\nend'
$ echo "$PARAMVAR"
space: tab: linefeed:
end
$ echo "${PARAMVAR//$'\t'/}"
space: tab:linefeed:
end

比較のために、[[:blank:]]以下を使用してスペースも削除します。

$ echo "${PARAMVAR//[[:blank:]]/}"
space:tab:linefeed:
end

そして変数参照は常に二重引用符で囲む必要があります。それ以外の場合は、すべてのスペースがトークンとして処理されます(それはechoスペースに変換されます)。

$ echo $PARAMVAR
space: tab: linefeed: end

おすすめ記事