bash의 for 루프 내부에서 변수에 값을 할당하는 방법은 무엇입니까?

bash의 for 루프 내부에서 변수에 값을 할당하는 방법은 무엇입니까?

for 루프 외부에서 arduino라는 변수를 평가하고 싶지만 항상 0이 표시됩니다.

arduino=0
for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do
    (
        syspath="${sysdevpath%/dev}"
        devname="$(udevadm info -q name -p $syspath)"
        [[ "$devname" == "bus/"* ]] && continue
        eval "$(udevadm info -q property --export -p $syspath)"
        [[ -z "$ID_SERIAL" ]] && continue
        dispositivo="/dev/$devname - $ID_SERIAL"
        if [[ $dispositivo == *"Arduino"* ]]; then
            arduino=1
            echo 'CONNECTED DEVICE'
        fi
    )
done

if [ $arduino -eq 1 ]; then
    echo 'CONNECTED DEVICE'
else
    echo 'DISCONNECTED DEVICE'
fi

답변1

괄호는 ( ... )서브쉘을 소개합니다. 하위 셸의 변수는 상위 셸에서 상속되지만 상위 셸로 다시 전파되지는 않습니다.

브래킷을 제거하면 제대로 작동합니다.

관련 정보