Eles não correspondem porque FILTERED_CXXFLAGS
tem vírgulas e ${TEMP_ARRAY[@]}
não:
Flag: -DNDEBUG
Filtered: -DDEBUG,
Filtered: -DNDEBUG,
Se as vírgulas estiverem lá, substitua:
if [ "$flag" = "$filtered" ]; then
com:
if [ "$flag" = "${filtered%%,}" ]; then
Como alternativa, se as vírgulas não devem estar lá, a questão é:
FILTERED_CXXFLAGS=("-DDEBUG", "-DNDEBUG", "-O0", "-O1", "-O2", "-O3", "-Os", "-Og")
Pode-se usar declare -p
para ver qual valor bash deu a uma variável:
$ declare -p FILTERED_CXXFLAGS
declare -a FILTERED_CXXFLAGS='([0]="-DDEBUG," [1]="-DNDEBUG," [2]="-O0," [3]="-O1," [4]="-O2," [5]="-O3," [6]="-Os," [7]="-Og")'
Pode-se ver que as vírgulas estão incluídas no valor de cada elemento. Embora muitos idiomas requeiram que elementos da matriz sejam separados por vírgulas, o shell Unix não. Em vez disso, trata-os como parte do valor dos elementos da matriz. Assim, substitua a definição acima por:
FILTERED_CXXFLAGS=("-DDEBUG" "-DNDEBUG" "-O0" "-O1" "-O2" "-O3" "-Os" "-Og")