我想在sed中使用一個變量,但不能解決它。我試過在sed中使用變量
read -p " enter your name" name
sed -i 's/myname/$name/g' file
但不幸的是它只是用「$ name」替換myname。 有沒有其他的方法?
我想在sed中使用一個變量,但不能解決它。我試過在sed中使用變量
read -p " enter your name" name
sed -i 's/myname/$name/g' file
但不幸的是它只是用「$ name」替換myname。 有沒有其他的方法?
這name
應該由外殼加以解釋,如果是雙引號內,按:
pax> read -p "Enter your name: " name
Enter your name: Bob
pax> echo "Hello, $name, how are you?"
Hello, Bob, how are you?
當你使用單引號,不會是情況:
pax> echo 'Hello, $name, how are you?'
Hello, $name, how are you?
但是,在這種情況下,假設你需要單出於某種原因引號(如防止插在別處的字符串),你可以外面的引號移動變量:
pax> echo 'Hello, '$name', how are you?'
Hello, Bob, how are you?
在特定情況下,這將是:
sed -i 's/myname/'$name'/g' file
儘管您可能想要留意邊緣情況,例如需要保留字符串中的特定間距,例如(我沒有測試過這個):
sed -i 's/myname/'"$name"'/g' file
但底線是,如果您使用bash
而您不需要需要單引號,則雙引號應該允許插值。
但是,即使你讓你的命令,從bash
重新分詞的行動安全,還是有供用戶如果,例如,他們進入重要的東西sed
本身,如/
搞砸的機會字符。
如果你想要他們的主目錄,你最好是對輸入進行消毒處理(例如參見回答here),或者使用類似$HOME
的東西。
一個確定的「傻瓜」,通常可以打破任何萬無一失的系統,但也有辦法讓它不太可能比只是一味地使用他們的投入:-)
至少這將是bash
。如果你使用的是雙引號的變量,那麼你可能仍然可以在這個答案中使用解決方案(儘管它當然取決於shell)。
你用'$ {name}'試過了嗎? – Preuk
這應該工作!你使用某種類型的外殼? – hek2mgl
也很好用,謝謝 – rog