2013-06-28 63 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}'在變量的擴展中用'new'替換了第一次出現的'old'; '$ {VARIABLE // old/new}'替換所有的事件。以上看起來很奇怪,因爲需要避開更換的「舊」部分的斜槓。 – twalberg