2016-11-15 11 views
1

如果我在shell中運行echo "$(echo 'A\nB')",我得到的輸出:運行帶有命令擴展的NPM腳本解析返回之前的結果 - 與慶典

A\nB 

但是如果我把相同的代碼在NPM腳本:

"scripts": { 
    "example": "echo \"$(echo 'A\nB')\"" 
} 

然後運行該腳本:npm run -s example

我獲得與\n的輸出與實際的新行代替:

A 
B 

如何禁用字符串的這個口譯?爲什麼NPM將命令擴展與shell不同?

這只是發生與命令擴展:這$(some command here)

+0

看起來,它的確看待命令擴展與shell不同。因爲在使用上面的命令時,shell中'echo「支持的開關將被打印。 – alok

回答

1

部分是npm的行爲,它的一部分是因爲你在一個JSON文件編寫劇本。

\n是換行符的JSON轉義序列。

"echo \"$(echo 'A\nB')\""將傳遞給npm爲:

echo "$(echo 'A 
B')" 

但是,肯定是有一些問題的換行npm的處理(可能與一個事實,即\n也是JS轉義序列)。

通過試驗&錯誤,我想通了,這個工程:

"scripts": { 
    "example": "echo \"$(echo 'A\\\\\\\\nB')\"" 
} 

沒有逃脫JSON,這將是echo "$(echo 'A\\\\nB')"

這很奇怪。也許你應該用npm提出問題。

https://github.com/npm/npm/issues

+0

有趣的是,因爲它的JSON,感謝解釋 – Baz

+1

提交到NPM的問題:https://github.com/npm/npm/issues/14635 – Baz