2013-06-28 9 views
1

Я пишу скрипт, где у меня есть каталог по умолчанию для вывода данных, или пользователь может указать каталог. Проблема в том, что я не знаю, как это сделать красноречиво. Вот что у меня есть:Удаление дополнительной косой черты, если таковая существует

#!/bin/bash 

OUTPUT="$1" 

DEFAULT_DIR=/Default/Dir/For/Me 

if [ -z "$OUTPUT" ] 
then 
    OUTPUT=.${DEFAULT_DIR} 
else 
    OUTPUT=""${OUTPUT_DIR}""${DEFAULT_DIR}"" 
fi 

echo "$OUTPUT" 
  • Если я это ./script / я получаю //Default/Dir/For/Me

  • Если я сделаю это ./script /home я получаю /home/Default/Dir/For/Me

  • Если я делаю это ./script /home/ я получаю /home//Default/Dir/For/Me

Есть ли способ сделать это красиво и правильно обработать первый сценарий? Очевидно, что первый сценарий не будет работать, потому что каталог // не существует.

+0

Помогает ли это? http://stackoverflow.com/questions/4638983/remove-unnecessary-slashes-from-a-given-path-with-bash – trojanfoe

+0

@trojanfoe да, это очень полезно. –

+1

Как насчет трубопровода с помощью 'tr -s"/"'? Он удалит дубликаты слэшей. – fedorqui

ответ

3

(Просто, чтобы понять из комментариев)

То, что я предлагаю, чтобы труба tr -s "/" так, что она удаляет дубликаты слэш:

$ echo "/home//Default/Dir/For/Me" | tr -s "/" 
/home/Default/Dir/For/Me 
$ echo "/home//Default/Dir/For/M//////////e" | tr -s "/" 
/home/Default/Dir/For/M/e 
2

Вот еще одно решение без необходимости раскошелиться другой процесс:

DEFAULT_DIR=${DEFAULT_DIR//\/\///} 

Это заменяет все вхождения /// в строке.

+0

Как это работает? Что такое замена? –

+0

Это синтаксис 'bash' для замены шаблонов в переменных -' $ {VARIABLE/old/new} 'заменяет первое вхождение' old' 'на' new' в расширении переменной; '$ {VARIABLE // старый/новый}' заменяет все вхождения. Вышеизложенное выглядит странным из-за необходимости избегать косой черты в «старой» части замены. – twalberg