문자열 배열을 반복하면서 값 중 하나에 대해 몇 가지 다른 작업을 수행하려고 합니다. 모든 요소에 대해 문자열 비교가 실패합니다.
arr[0]='red'
arr[1]='blue'
arr[2]='yellow'
arr[3]='green'
## now loop through the above array
for i in "${arr[@]}"
do
if [ "$i"="green" ];
then
echo "i('$i') is equal to green"
else
echo "i('$i') is not equal to green"
fi
done
나는 또한 시도했다(동일한 결과):
if [ "$i"='green' ];
그리고
if [ $i='green' ];
그리고
if [ $i="green" ];
위의 각 항목에 대한 출력:
i('red') is equal to green
i('blue') is equal to green
i('yellow') is equal to green
i('green') is equal to green
비교에서 내가 뭘 잘못하고 있는 걸까?
답변1
공백이 누락되었습니다.
[ $i="green" ]
방법[ -n $i=green ]
당신은해야합니다
[ "$i" = green ]
심지어
[ green = "$i" ]
이는 에도 적용됩니다 i=-n
.
다른 쉘로 포팅할 필요가 없다면 bash에서 대괄호를 사용할 수 있습니다.
[[ $i = green ]]
따옴표는 필요하지 않습니다(사실 오른쪽에는 확장을 방지하는 특별한 의미가 있습니다). ==
대신 사용할 수도 있습니다 =
.
답변2
=
비교 연산자 주위에는 공백이 필요합니다.
if [ "$i" = "green" ];
답변3
주변 공백이 필요한 이유 는 및 명령이 전달하는 인수 수에 따라 다른 작업을 수행하기 =
때문입니다 . 단일 인수( )만 전달하는 경우 문자열이 비어 있지 않으면 결과는 true입니다.[
test
[ "$i"=green ]
귀하의 코드와 출력이 일치하지 않습니다. 귀하가 게시한 코드에 따라 각 색상은 다음과 같아야 합니다.i('colour') is equal to green
답변4
[ green = "$i" ]
printf "( '%s' ) is %.$?0sequal to green.\n" "$i" "not "
...그것도 작동합니다.