2015-03-31 2 views
0

В сценарии оболочки я хотел бы заменить все символы подчеркивания пустым пространством в функции, использующей 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

ответ

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: empty string2 – GabryRome

+0

Посмотрите мое обновление, если этот ответ решает вашу проблему, пожалуйста, повысьте и отметьте его как принятый. –

+0

На самом деле вы должны указывать * все * там. Если '$ name' содержит какие-либо метасимволы оболочки или нерегулярные пробелы, эхо его некорректно изменяет его. Если регулярное выражение содержит любые метасимволы оболочки или пробелы, 'grep 'будет работать некорректно. Если '$ f' содержит любые метасимволы или пробелы оболочки, команда' tr' будет работать некорректно. – tripleee

Смежные вопросы