2014-09-12 48 views
5

我經常寫ccclear而不是clear如何在bash別名中使用正則表達式

是否有可能在別名中使用正則表達式?喜歡的東西:

alias c\+lear='clear' 
+2

我認爲,這是不可能的。 – 2014-09-12 14:34:40

+0

@AvinashRaj,...沒有別名,沒有。但是,期望的行爲可以通過其他方式實現。 – 2014-09-12 14:47:39

+1

使用「clear」鍵盤快捷鍵。這是一個頻繁的操作。 'Ctrl + L'應該使用默認設置。 – PSkocik 2014-09-12 14:50:35

回答

5

別名運行簡單的前綴替換,而不是爲別的不多足夠強大。

但是,在Bash 4中,您可以使用名爲command_not_found_handle的函數在這種情況下觸發並運行您選擇的邏輯。

command_not_found_handle() { 
    if [[ $1 =~ ^c+lear$ ]]; the 
    clear 
    else 
    return 127 
    fi 
} 

如果你希望能夠動態地添加新的映射:

declare -A common_typos=() 
common_typos['^c+lear$']=clear 
command_not_found_handle() { 
    local cmd=$1; shift 
    for regex in "${!common_typos[@]}"; do 
    if [[ $cmd =~ $regex ]]; then 
     "${common_typos[$regex]}" "[email protected]" 
     return 
    fi 
    done 
    return 127 
} 

上述規定,你可以平凡添加新的映射:

common_typos['^ls+$']=ls 
+0

哎唷!這裏有一個微妙的錯誤,我在迭代替換而不是正則表達式。修正後的版本已經到位。 – 2014-09-12 16:52:04