文字列変数の値がユーザー提供または生成されたものかどうかを簡単にチェックする方法を実装したいと思います。
これまでの「アルゴリズム」は、文字列が生成された場合に「GUARD」値を文字列に追加/先頭に追加するだけです。何かのようなもの:
USERVAL=$1
GUARDEDVAL=GUARD_${USERVAL}_GUARD
今、変数の値にこれらのGUARDSが設定されているかどうかを確認する簡単なチェックを探しています。例:
check_guard() {
local v=$1
if [ "${v}" = "${v#GUARD_}" ]; then return 1; fi ## missing leading 'GUARD_'
if [ "${v}" = "${v%_GUARD}" ]; then return 1; fi ## missing trailing 'GUARD_'
return 0
}
check_guard "${GUARDEDVAL}" && echo "ok"
check_guard "${USERVAL}" && echo "ok"
の実装はcheck_guard
正常に機能するようになりましたが、少し冗長だと思います。
私の質問は:値の両端に文字列が存在するかどうかをチェックできますか?
このようなもの(明らかに機能していません):
test "${v}" != "${${v#GUARD_}%_GUARD}"
私はむしろbashビルトインのみを使用し、sedのような外部コマンドは使用しません。
test "${v}" = "GUARD$(echo $v | sed -e 's|GUARD||g')GUARD"
これらすべてのフープの理由は、GUARDEDVAL が実際には、スクリプト中に作成および破棄する lvm パーティションの名前であり、このプロセスで他の (使用済みなどの) ディスク パーティションの 1 つを破棄したくないためです。偶然。