首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在here-doc中包含带有变量展开的代码

如何在here-doc中包含带有变量展开的代码
EN

Unix & Linux用户
提问于 2020-10-26 17:29:56
回答 1查看 84关注 0票数 1

试图在文件中设置以下内容:

代码语言:javascript
复制
cat < /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]}将转换为空值:

代码语言:javascript
复制
for i in ""; do
  echo 1024 > /sys/block//queue/nr_requests
  echo 1024 > /sys/block//queue/read_ahead_kb
  blockdev --setra 8192 /dev/
done

如何防止这种情况发生?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-10-26 18:41:24

您需要引用您选择的单词作为此处文档的标签,以防止其内容被扩展:例如,<<'EOF'而不是<。

引用手册

这里文档的格式是:<\newline,必须使用“\”引用字符“\”、“$”和“`”。

由于代码中没有引用EOF (来自cat <),所以在运行cat时将执行D12文档中的所有扩展。然而,此时这里的文档本身没有被执行,因此没有完成对disks的赋值,并且disks被扩展到这里文档被处理之前的值:

代码语言:javascript
复制
$ unset disks
$ disks=foo
$ cat < disks=bar
> echo "$disks"
> EOF
disks=bar
echo "foo"
票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/616500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档