Есть переменная, ее необходимо сравнить с множеством других и выполнить код, если по результатам проверки, значение переменной совпадет с значением хотя бы одной из всех остальных. Как это сделать красиво без нагромождений?
Сравнение переменной с множеством других (Bash)
Загнать переменные для сравнения в массив?
#!/bin/bash
a=1
b=2
c=1
d=( $b $c )
e=( $a $c )
f=( $a $b )
[ "$a" = "$d" ] && ( echo "a = b/c" )
[ "$b" = "$e" ] && ( echo "b = a/c" )
[ "$c" = "$f" ] && ( echo "c = a/b" )
Выводится только "c = a/b". В чем ошибка?
#!/bin/bash
a=1
b=2
c=1
d=( $b $c )
e=( $a $c )
f=( $a $b )
[ "$a" = "${d[@]}" ] && ( echo "a = b/c" )
[ "$b" = "${e[@]}" ] && ( echo "b = a/c" )
[ "$c" = "${f[@]}" ] && ( echo "c = a/b" )
line 8: [: too many arguments
line 9: [: too many arguments
line 10: [: too many arguments
line 8: [: too many arguments
line 9: [: too many arguments
line 10: [: too many arguments
#!/bin/bash
a=1
b=2
c=1
d=( $b $c )
e=( $a $c )
f=( $a $b )
[[ "$a" = "${d[@]}" ]] && ( echo "a = b/c" )
[[ "$b" = "${e[@]}" ]] && ( echo "b = a/c" )
[[ "$c" = "${f[@]}" ]] && ( echo "c = a/b" )
Основывался вот на этом:
Вывести содержимое всего массива: $ echo ${arr[@]}
С вашим вариантом ошибки выдавать перестало, но сама конструкция "$a" = "${d[@]}" видимо не верна, т.к. не выводится вообще ничего.
Как грамотно сравнивать переменную одновременно со всеми элементами массива?
если переменная не содержит пробелов, то можно что-то вроде этого соорудить:
case "ARRAY[*]"
*${VAR}*) <что делать>;;
esac
но это не красиво и отчасти хак...
иначе только в цикле... красиво этот цикл будет завернуть в фунцию...
В bash не силён, но, может, как-то так:
#!/bin/bash
a=1
b=2
c=3
d=4
x=5
arr=( a b c d )
if [[ ${arr[$x]} ]]
then
echo 'Yes'
else
echo 'No'
fi
[[ ${arr[$a]} ]] && ( ... )
Увы, не сработало. Но все равно спасибо, выглядит красиво.
Остановился на таком варианте (идея не моя):
[[ " ${d[*]} " =~ " $a " ]] && ( ... )Сравниваются ip адреса