sh는 값을 변수로 나눕니다.

sh는 값을 변수로 나눕니다.

이는 명령줄에서는 작동하지만 스크립트에서는 작동하지 않습니다.

read -r local_temperature system_mode preset running_state current_heating_setpoi
nt <<< $(thermostat)

구문 오류: 예상치 못한 리디렉션

스크립트로 할 수 있나요? 5번 정도 사용하면 cut좀 안 좋은 것 같긴 한데, 생각나는 건 그것뿐이네요.

답변1

<<대시(Ubuntu의 경우)의 경우 herestring 대신 기존 heredoc( )를 사용할 수 있습니다 .

read -r local_temperature system_mode ... <<END # END must be unquoted
$(thermostat)
END

그러나 busybox를 사용하면 가변 쓰레기로 보이는 가짜 "찾을 수 없음" 오류가 발생합니다.

(1) 명령의 출력에 glob 문자가 포함되어 있지 않거나 glob 또는 유사한 명령을 사용하여 glob을 끄고 set -f(2) 후속 명령에 필요한 인수를 전달하지 않고 스크립트를 실행하는 경우 다음을 수행할 수 있습니다. (ab) 위치 인수를 사용하십시오.

set -- $(thermostat); local_temperature=$1; system_mode=$2; ...

이는 "마지막 = n번째 var에 결합된 n-1 이후의 모든 단어"와는 다르지만 read다음과 같은 방법을 사용하여 대략적으로 계산할 수 있습니다.

a=$1; b=$2; c=$3; shift 3; d=$* 
# d gets all words after the first 3 but not the original delimiters e.g. multiple spaces

관련 정보