私のスクリプトには次の行があります。
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