Shell
避免在破折號中使用 echo 進行反斜杠擴展
首先創建一個包含這個確切內容的文件:
a\nb
我將此文件命名為
foo
,如果我執行以下命令,它將列印文件的確切內容:bash -c 'bar=$(cat foo);echo "$bar"'
但是,如果您使用
sh
而不是執行它,bash
結果是:a b
這裡的問題
\n
是正在被翻譯成我不想的換行符。我的機器預設
sh
是dash
,目標機器執行一個內置的嵌入式 linuxash
,busybox
所以它非常簡約,它的工作方式與dash
not非常相似bash
。如果我只執行
sh -c 'cat foo'
它會得到預期的結果,但我希望它在變數中,我該怎麼做?
實際上,shell 分叉並執行命令。但是每次執行命令(不是內置命令)時,shell 都會分叉。這就是貝殼的工作原理,這是不可避免的。
注意:外殼不翻譯任何東西。該
echo
命令可能。但您可以printf
改用:your_shell -c 'bar=$(cat foo); printf %s "$bar"'