
これは:
3.8.13-68.3.4.el6uek.x86_64 #2 SMP Tue Jul 14 15:03:36 PDT 2015 x86_64 x86_64 x86_64 GNU/Linux
bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
私は次の構文に精通しています。
[ $VAR = "iotools" ] || [ $VAR_2 = "iotools" ]
valueを$VAR
含めるか、valueを含める必要があります。iotools
$VAR_2
iotools
以下のように書く方法はありますか?
[ $VAR||$VAR_2 = "iotools" ]
アイデアは、コードが占めるスペースを節約し、2番目の角かっこ内の余分なコードを削除することです。
答え1
いいえ、比較の左部分を減らすことはできません。ただし、右側のパターンを使用できます。
[[ iotools == @("$VAR"|"$VAR_2") ]]
この機能を機能させるには、代わり[[ ... ]]
に使用する必要があります。[ ... ]
バラよりパターンマッチングもっと学ぶman bash
。
一致を防ぐには、変数を引用符で囲む必要がありますVAR='a|iotools|b'
。
答え2
Bashを使用しているので、次の2つの概念を使用してこれを実行できます。
同様の名前を持つ複数の変数を一覧表示する方法があります。
VAR=iotools VAR_2=tools2 VAR_3=othertools printf '<%s> ' "${!VAR@}"
以下を印刷します。
<VAR> <VAR_2> <VAR_3>
これは間接的に行うこともできます
${!var}
(varは$ VARとは異なる変数です)。for var in "${!VAR@}"; do printf '<%s> ' "${!var}" done
以下を印刷します。
<iotools> <tools2> <othertools>
すべて合わせると次のようになります。
#!/bin/bash
VAR=iotools
VAR_2=tools2
VAR_3=othertools
testvalue="$1"
for var in "${!VAR@}"; do
if [[ ${!var} == $testvalue ]]; then
echo "Some value matched"
break
fi
done
呼び出しは次のとおりです。
$ script iotools
Some value matched
$ script notool
$