我正在尝试编写一个简单的脚本来打印从另一个文件中提取的一些变量。定义所有变量后,目标是打印出以下行:
-bad 0.0 -aswap -AMX -decim $decim -dspfvs $dspfvs -grpdly $grpdly \
所以这里的复杂性是我不仅需要打印变量,还需要打印许多其他符号,包括 - 。 \ 我需要在最后换行。
我努力了
echo " -bad 0.0 -aswap -AMX -decim $decim -dspfvs $dspfvs -grpdly $grpdly \\"
这显然不起作用并得到一些奇怪的输出,如下所示:
\rpdly 67ecim 1792
其中 67 和 1792 是我的变量 $grpdly 和 $decim
在此先感谢您的帮助!
答案1
这并不能解释一切,但至少部分问题是在它们的值末尾有回车符。这意味着它正在打印如下内容:
-bad 0.0 -aswap -AMX -decim 1792<CR>
-dspfvs something<CR>
-grpdly 67<CR>
\\
...除了每一“行”都打印在前一行的顶部,因为它们是由回车符而不是换行符分隔的。现在,如果您将我刚才描述的内容与您的输出进行比较,它不会完全匹配(我的给出“ \pdly 6792swap -AMX -decim 1792”),所以我认为出于某种原因,那里还有另一个。
造成这种情况的原因可能是您正在读取的文件是 DOS/Windows 格式,该格式在每行末尾使用回车符和换行符; unix只使用换行符,并且倾向于将回车符视为该行内容的一部分,例如将其读入末尾的变量中......就像您所得到的那样。一种选择是使用dos2unix
或某种类似的程序将文件转换为 unix 格式。另一种方法是在从文件中读取时删除回车符,如下所示:
set decim = `cat decimfile | tr -d '\r'`
(使用您使用的任何实际命令而不是该cat
部分。)或者,您可以在读取变量后清除它们:
set decim = `echo $decim | tr -d '\r'`
请注意,对于如何“书写”回车符有许多不同的约定;我一直使用“ <CR>
”,但也tr
能理解“\r”,而其他一些程序将使用“^m”或“^M”。