Shell

避免在破折號中使用 echo 進行反斜杠擴展

  • January 5, 2015

首先創建一個包含這個確切內容的文件:

a\nb

我將此文件命名為foo,如果我執行以下命令,它將列印文件的確切內容:

bash -c 'bar=$(cat foo);echo "$bar"'

但是,如果您使用sh而不是執行它,bash結果是:

a
b

這裡的問題\n是正在被翻譯成我不想的換行符。

我的機器預設shdash,目標機器執行一個內置的嵌入式 linux ashbusybox所以它非常簡約,它的工作方式與dashnot非常相似bash

如果我只執行sh -c 'cat foo'它會得到預期的結果,但我希望它在變數中,我該怎麼做?

實際上,shell 分叉並執行命令。但是每次執行命令(不是內置命令)時,shell 都會分叉。這就是貝殼的工作原理,這是不可避免的。

注意:外殼不翻譯任何東西。該echo命令可能。但您可以printf改用:

your_shell -c 'bar=$(cat foo); printf %s "$bar"'

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