macos
  • bash
  • shell
  • terminal
  • zsh
  • 2014-01-21 44 views 1 likes 
    1

    在包含空格的文件夾中爲二進制工具創建別名時,別名已正確存儲,但調用該命令時,空間的計算方式與未正確取消一樣。Shell別名其中空白取消

    該二進制文件可在$PATH中查看。我從zsh 4.3.11和bash 3.2.48運行了這兩個文件,結果都一樣。

    二進制路徑

    ~/Test Folder/fooBinary 
    

    別名

    alias foo="`which fooBinary`" 
    

    這導致

    foo='~/Test Folder/fooBinary' 
    

    現在

    [shell]: no such file or directory: ~/Test 
    
    調用這個別名結果

    這用於逃避從別名間距,我沒有打擾檢查我的舊shell的版本,或者我會去找它。

    的我沒有真正逃脫間距:

    alias foo="'`which fooBinary`'" 
    

    我的問題:

    爲什麼空間在所列出的別名評估?
    有沒有更好的轉義方式which

    +0

    如果'fooBinary'由'which',然後'fooBinary'是在你的'PATH中找到'並且可以作爲'fooBinary'被調用,而不用擔心完整的路徑。別名「alias foo = fooBinary」也應該可以工作。 – chepner

    +0

    不幸的是,它沒有。要麼因爲我需要傳遞參數或其他問題。當我嘗試這種方式時,我得到一個錯誤響應,因此需要引用轉義'which'。 – cdbitesky

    回答

    3

    別名總是在空格上分開。這是有意和有用的,因爲它可以讓你別名參數,例如alias rm='rm -i'alias commit='git commit -a'

    如果您需要以編程方式引用一個參數,你可以使用printf %q添加逃逸的水平:

    alias foo="$(printf %q "$(which fooBinary)")" 
    
    相關問題