我对 UNIX 很陌生,目前正在尝试学习 Bash。
我有 3 个脚本:xyz.sh
, abc.sh
& wow.sh
。我想复制内容,xyz.sh
因为它是wow.sh
使用abc.sh
,即,一个脚本将一个脚本复制到另一个脚本。
xyz.sh:
echo "\n code $code \n"
abc.sh:
while read line
do
echo $line >> wow.sh
done < xyz.sh
执行 abc.sh 时,wow.sh 的内容为
echo "n code $code n"
\n 被转换为 n,有人可以解释一下为什么会发生这种情况以及是否有解决方法可以将 \n 保留为 \n?
另外,如果以前有人问过类似的问题,请提供一个链接,我找不到任何链接。
答案1
如果您想将(的内容)附加xyz.sh
到wow.sh
,最简单的方法是:
cat xyz.sh >> wow.sh
使用它read
来获得相同的结果并不像看起来那么简单。\
是 shell 中的特殊字符。您必须使用该-r
选项,这意味着:
-r do not allow backslashes to escape any characters
cat
默认情况下执行此操作。而且read
无论如何都不是执行此类操作的正确工具。当您比较这两个命令的语法时,直觉应该会告诉您相同的结果。
您可能会对另外一个命令感兴趣。它是source
内置命令,也称为.
。如果您从脚本中获取文件,则其效果就像源文件的内容存在于脚本中一样。因此,将这一行放入wow.sh
:
. xyz.sh
或者
source xyz.sh
不复制xyz.sh
to的内容,但在执行时执行wow.sh
的内容,就好像它存在于脚本中一样。当然,前提是该文件在脚本执行期间存在。xyz.sh
wow.sh
xyz.sh
wow.sh