2016-03-01 38 views
0

我只想在文本文件中附加一個用戶輸入參數。我使用下面的命令:如何將反斜槓參數傳遞給腳本?

echo "$2" >> "./db.txt" 

$2預計將用戶設置喜歡的路徑:D:\Projects\MyProject。它寫入文件,但沒有反斜槓。其結果是:

d:ProjectsMyProject

我到處都找不到如何解決這個問題。我試過使用-e-E params(taken from here),但在這種情況下似乎沒有區別。

+1

難道是'$ 2' *從未*包含這些反斜槓?你如何調用你的腳本? – Biffen

+0

'echo'沒有問題。發佈完整的代碼。 –

+0

@Biffen它應該被稱爲'./script.sh D:\ Projects/MyProjects'。這是強制性的,有檢查。 – DontVoteMeDown

回答

3

您必須在shell中跳過反斜槓:\\,或者將該字符串放在引號中。

爲了調試目的,使用set -x

+0

有沒有辦法避免這種情況並解析代碼? Imo不樂意讓用戶自己逃脫。 – DontVoteMeDown

+1

沒有辦法。 –

+0

嗯,我想,引號會有用。 – DontVoteMeDown

0

echo 'foo\bar\baz'將顯示foo\bar\baz

使用時沒有引號在所有的你的論點,一些字符具有特殊的意義,例如$意味着變量作爲$HOME。空間是參數分隔符,所以如果你想把它作爲一個參數傳遞,你也必須逃避。

您可以使用strong quoting不必引用backslaches(例如'foo\bar')。在強引號字符串中,唯一具有特殊含義的字符是',這意味着如果要將其放入屏幕中,它是唯一必須轉義的字符。

所以echo 'foo\bar\baz'將顯示foo\bar\baz

+0

即使已轉義,也不能在單引號字符串中包含單引號。 'echo'foo \'''是一個語法錯誤。 – chepner