Csh

如何在 csh 中使用 echo

  • September 15, 2016

我正在嘗試編寫一個簡單的腳本來列印從另一個文件中提取的一些變數。定義了所有變數後,目標是列印出以下行:

-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 and $ 十一奉獻

在此先感謝您的幫助!

這並不能解釋一切,但至少部分問題是您在其值的末尾有輸入。這意味著它正在列印如下內容:

 -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”。

引用自:https://unix.stackexchange.com/questions/309874