我是shell腳本的新手。有人可以幫助我用命令逃離「\」的空間。 我有一個變量FILE_PATH = /路徑/我的/文本文件,
我想獨自逃生的空間 FILE_PATH = /路徑/到\我的/文\文件Unix命令轉義空格
我用TR -s命令嘗試,但它不利於
FILE_PATH = echo FILE_PATH | tr -s " " "\\ "
有人可以提出正確的命令!
我是shell腳本的新手。有人可以幫助我用命令逃離「\」的空間。 我有一個變量FILE_PATH = /路徑/我的/文本文件,
我想獨自逃生的空間 FILE_PATH = /路徑/到\我的/文\文件Unix命令轉義空格
我用TR -s命令嘗試,但它不利於
FILE_PATH = echo FILE_PATH | tr -s " " "\\ "
有人可以提出正確的命令!
還有更多的製作串不僅僅是逃避空間安全的,但你可以擺脫空間與:
FILE_PATH=$(echo "$FILE_PATH" | sed 's/ /\\ /g')
你願意詳細說明嗎?我猜測你建議刪除shell保留的字符,例如'[](){}; ''[:space:]&'以及不可打印的字符。你還有什麼想法嗎? –
@Barton它肯定會依賴於使用,但是你提到的所有字符都是可疑的。頭腦是試圖逃避角色的任何形式的保護是脆弱的,而不是沒有很小心就應該做的事情。 –
你可以用sed
做到這一點:
NEW_FILE_PATH="$(echo $FILE_PATH | sed 's/ /\\ /g')"
'FILE_PATH = $(echo $ FILE_PATH | sed's// \\\/g「)' 您需要三個反斜槓,因爲您必須在shell和sed中都轉義反斜槓字符。 – sevcsik
FILE_PATH=/path/to my/text file
FILE_PATH=echo FILE_PATH | tr -s " " "\\ "
這第二行需要是
FILE_PATH=echo $FILE_PATH | tr -s " " "\\ "
但我不認爲這很重要。一旦你到達這個階段,你太遲了。該變量已設置,並且空格被轉義或變量不正確。
FILE_PATH = '/路徑/我的/文本文件'
'FILE_PATH = echo $ FILE_PATH | tr -s「」「\\」'壞了。你需要'$()' –
夠公平 - 我很快打字 - 但這不是主要的一點。 – hymie
另外,'tr'不能用於此。 –
如果你正在使用bash,你可以使用它內置的printf的%Q格式(在bash型help printf
):
FILENAME=$(printf %q "$FILENAME")
這不僅會引用空間,而且還會引用shell的所有特殊字符。
使用此我仍然有兩個連接空格的問題。我能做什麼? –
您可以使用 '單引號' 到包含空格的路徑上運行:
cp '/path/with spaces/file.txt' '/another/spacey path/dir'
grep foo '/my/super spacey/path with spaces/folder/*'
在腳本:
#!/bin/bash
spacey_dir='My Documents'
spacey_file='Hello World.txt'
mkdir '$spacey_dir'
touch '${spacey_dir}/${spacey_file}'
除非你需要做可變插值,否則我實際上會建議使用單引號而不是雙引號。有一些鬼鬼祟祟的字符,比如'!'bash會嘗試在雙引號內插入,但不是單引號。當然,你可以自由地對那些把爆炸字符放在文件名中的人施加麻煩。 –
使用引號保留SPACE字符
你有什麼**真實**問題? –
只是想逃離的空間,以便我可以在其他命令如cp,rm等中使用 – Mojoy
如果您想在其他命令中使用FILE_PATH,只需使用引號。 'rm「$ FILE_PATH」'工作得很好,如果它包含空格。 –