我只想在文本文件中附加一個用戶輸入參數。我使用下面的命令:如何將反斜槓參數傳遞給腳本?
echo "$2" >> "./db.txt"
$2
預計將用戶設置喜歡的路徑:D:\Projects\MyProject
。它寫入文件,但沒有反斜槓。其結果是:
d:ProjectsMyProject
我到處都找不到如何解決這個問題。我試過使用-e
或-E
params(taken from here),但在這種情況下似乎沒有區別。
我只想在文本文件中附加一個用戶輸入參數。我使用下面的命令:如何將反斜槓參數傳遞給腳本?
echo "$2" >> "./db.txt"
$2
預計將用戶設置喜歡的路徑:D:\Projects\MyProject
。它寫入文件,但沒有反斜槓。其結果是:
d:ProjectsMyProject
我到處都找不到如何解決這個問題。我試過使用-e
或-E
params(taken from here),但在這種情況下似乎沒有區別。
您必須在shell中跳過反斜槓:\\
,或者將該字符串放在引號中。
爲了調試目的,使用set -x
。
echo 'foo\bar\baz'
將顯示foo\bar\baz
使用時沒有引號在所有的你的論點,一些字符具有特殊的意義,例如$
意味着變量作爲$HOME
。空間是參數分隔符,所以如果你想把它作爲一個參數傳遞,你也必須逃避。
您可以使用strong quoting不必引用backslaches(例如'foo\bar'
)。在強引號字符串中,唯一具有特殊含義的字符是'
,這意味着如果要將其放入屏幕中,它是唯一必須轉義的字符。
所以echo 'foo\bar\baz'
將顯示foo\bar\baz
即使已轉義,也不能在單引號字符串中包含單引號。 'echo'foo \'''是一個語法錯誤。 – chepner
難道是'$ 2' *從未*包含這些反斜槓?你如何調用你的腳本? – Biffen
'echo'沒有問題。發佈完整的代碼。 –
@Biffen它應該被稱爲'./script.sh D:\ Projects/MyProjects'。這是強制性的,有檢查。 – DontVoteMeDown