![当我使用在将粘贴到另一个文件的代码中定义的变量时,它不会打印在文件中。为什么?](https://linux22.com/image/1065724/%E5%BD%93%E6%88%91%E4%BD%BF%E7%94%A8%E5%9C%A8%E5%B0%86%E7%B2%98%E8%B4%B4%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E4%BB%A3%E7%A0%81%E4%B8%AD%E5%AE%9A%E4%B9%89%E7%9A%84%E5%8F%98%E9%87%8F%E6%97%B6%EF%BC%8C%E5%AE%83%E4%B8%8D%E4%BC%9A%E6%89%93%E5%8D%B0%E5%9C%A8%E6%96%87%E4%BB%B6%E4%B8%AD%E3%80%82%E4%B8%BA%E4%BB%80%E4%B9%88%EF%BC%9F.png)
echo "x=0
while true; do
((i++))
cp file1 file1$x
done
" >> file1
` 当我使用在将粘贴到另一个文件的代码中定义的变量时,该变量不会打印在文件中。为什么?我该如何修复它?
答案1
如果你问为什么cp file1 file1$x
变成cp file1 file1
或cp file1 file1foo
(当前 shell 中foo
的值在哪里),那么这是因为在双引号内时会发生变量扩展。$x
$x
您可以使用以下方法防止变量扩展单身的引号:
echo 'x=0
while true; do
((i++))
cp file1 file1$x
done
' >> file1
或者(更习惯用)使用带引号终止符的 here document
cat >> file1 << 'EOF'
x=0
while true; do
((i++))
cp file1 file1$x
done
EOF