다음을 포함하는 배열이 있습니다.
line number 1
line number 2
line number 3
line number 4
line number 5
그런 다음 사용자에게 입력을 요청합니다.
read userInput
echo $userInput
그런 다음 내 배열의 숫자인 사용자 입력을 일치시키려고 합니다.
for i in "${!array[@]}";do
if [["${array[$i]}"="$userInput"]]
then
echo "~"
echo " $i"
fi
done
그러나 이것은 작동하지 않습니다. 원하는 출력은 다음과 같습니다.
4
line number 1
line number 2
line number 3
~line number 4
line number 5
누구든지 나를 도와줄 수 있나요?
답변1
조건에는 [[ .. ]]
연산자와 값 주위에 공백이 필요합니다.
[[ "${array[$i]}" = "$userInput" ]]
instead of
[["${array[$i]}"="$userInput"]]
(후자는 단어로 해석되며 쉘은 해당 이름을 가진 명령을 찾으려고 시도합니다.)
또한 ${!array[@]}
배열의 인덱스가 제공됩니다. 스크립트에서 index 를 인쇄했기 때문에 이것이 원하는 것인지 확실하지 않지만 echo $i
예제 출력에는 배열에 저장된 문자열이 포함된 것 같습니다. 특별한 인덱스가 필요하지 않은 경우에는 for value in "${array[@]}"
.
그런 다음 패턴의 일부를 일치시키려면 패턴 앞과 뒤의 모든 항목을 허용해야 함을 쉘에 명시적으로 알려야 합니다( [[ "$var" = *$pattern* ]]
패턴 주위에 따옴표가 없음). (바라보다여기)
그래서 조금 설명하자면 다음과 같습니다.
A=("abc" "def" "ghi")
pat=e
for val in "${A[@]}"; do
[[ "$val" = *$pat* ]] && echo -n "~"
echo "$val"
done
인쇄
abc
~def
ghi