2015-03-31 65 views
0

在shell腳本中,我想用函數中的空格替換所有下劃線字符,該函數使用tr但接收錯誤,因爲我不知道要傳遞在可變空間TR如何在tr命令中傳遞變量空格字符

function sanitizeDirName() { 
    local name=$1 
    local f=$2 
    local r=$3 
    echo ${name##*/} | grep -E -o $re | tr $f $r 
} 

sanitizeDirName "~/test_1" "_" " " 

謝謝

+0

'回聲$ {名## * /} | grep -E -o「$ re」| tr「$ f」「$ r」' – anubhava 2015-03-31 08:49:35

回答

0

你需要引用您的變量,因爲它們是從用戶輸入填充,可以有空格或元字符(如tripleee在評論中指出):

echo ${name##*/} | grep -E -o "$re" | tr "$f" "$r" 

如果要刪除_,那麼你可能想使用-d標誌

echo ${name##*/} | grep -E -o $re | tr -d $f 
+0

它的工作原理謝謝:-) 如果我想要替換_,那該怎麼辦? 這樣的 sanitizeDirName「〜/ test_1」「_」「」 如果我嘗試我收到此錯誤:tr:空字符串2 – GabryRome 2015-03-31 09:54:09

+0

查看我的更新,如果此答案解決您的問題,請upvote並將其標記爲已接受。 – 2015-03-31 09:56:51

+0

其實你應該在裏面引用*一切*。如果'$ name'包含任何shell元字符或不規則的空格,回顯它不加引號會改變它。如果正則表達式包含任何shell元字符或空格,那麼'grep'將無法正常工作。如果'$ f'包含任何shell元字符或空格,'tr'命令將無法正常工作。 – tripleee 2015-03-31 11:42:37