파일에서 다음을 찾아보세요.
cat <<EOF > /etc/somefile.name
disks=($(lsblk | grep disk | cut -d " " -f 1 | grep -v │))
for i in "${!disks[@]}"; do
echo 1024 > /sys/block/${disks[$i]}/queue/nr_requests
echo 1024 > /sys/block/${disks[$i]}/queue/read_ahead_kb
blockdev --setra 8192 /dev/${disks[$i]}
done
EOF
완료되면 ${!disks[@]}
합계가 ${disks[$i]}
빈 값으로 변환됩니다.
for i in ""; do
echo 1024 > /sys/block//queue/nr_requests
echo 1024 > /sys/block//queue/read_ahead_kb
blockdev --setra 8192 /dev/
done
그것을 방지하는 방법?
답변1
콘텐츠가 확장되는 것을 방지하려면 여기에서 문서 레이블로 선택한 단어를 인용해야 합니다. 예를 들어 <<'EOF'
대신 <<EOF
.
인용하다수동:
이 문서의 형식은 다음과 같습니다.
[n]<<[-]word here-document delimiter
[...] 어떤 부분이라도단어인용됐으니 그럼구분 기호따옴표를 제거한 결과입니다.단어, 여기 문서의 줄은 확장되지 않습니다. 만약에단어따옴표가 없으면 이 문서의 모든 행은 매개변수 확장, 명령 대체 및 산술 확장을 거치며
\newline
문자 순서는 무시되며 ' ', ' ' 및 ' ' 문자\
는 ' ' 를 사용하여 인용해야 합니다 .\
$
`
EOF
(from cat <<EOF
)은 코드에서 인용되지 않았 으므로 여기 문서의 모든 확장은 cat
런타임에 실행됩니다. 그러나 이때 문서 자체는 그렇지 않습니다.처형된이므로 disks
할당되지 않지만 disks
여기에서 문서를 처리하기 전의 값으로 확장됩니다.
$ unset disks
$ disks=foo
$ cat <<EOF
> disks=bar
> echo "$disks"
> EOF
disks=bar
echo "foo"