何も印刷されませんが、なぜそれが理解できないのですか?
read -e -i "no" -p "Install? " result
if [ '$result' == 'yes' ]; then
declare -a subs=('one' 'two')
for sub in "${subs[@]}"
do
echo "$sub"
done
fi
ベストアンサー1
$result
一重引用符の代わりに二重引用符を使用する必要があります。それ以外の場合は拡張されません。
[ '$result' == 'yes' ]
$result
literalをliteralと比較しようとするため、決してtrueと評価されませんyes
。
また、Kusaranandaが指摘したように、演算子はbash==
テスト設定に使用され、演算子は標準(POSIX)テスト設定に使用されます。 [[
=
[
したがって、その行を次のように変更する必要があります。[ "$result" = 'yes' ]
知っておくべきもう一つの良いツールは、スクリプトを追跡するために使用できる組み込みコマンドset
とそのスイッチです。これを元のスクリプトの先頭に-x
追加して実行すると、次のものが印刷されることがわかります。set -x
+ read -e -i no -p 'Install? ' result
Install? yes
+ '[' '$result' == yes ']'
ご覧のとおり、「$result」を「yes」と比較しようとしています。正しく引用すると、変数は表示されず、$result
次のように拡張が表示されます。
+ read -e -i no -p 'Install? ' result
Install? yes
+ '[' yes == yes ']'
+ subs=('one' 'two')
+ declare -a subs
+ for sub in '"${subs[@]}"'
+ echo one
one
+ for sub in '"${subs[@]}"'
+ echo two
two
スクリプトを使用して壁に頭を当てるたびに、スクリプトを開き、スクリプトが何をしているのか、間違ったset -x
場所を追跡する必要があります。