ファイルで次を探します。
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"