Shell

魚:別名中的空格

  • September 21, 2015

我正在嘗試為目錄中的執行檔命名,其中包含空格。例如:

alias myfile="/home/ben/test case/myfile"

現在,這並沒有按照我想要的方式擴展(它認為/home/ben/test是執行檔)。在 bash 中,您可以添加額外的引號:

alias myfile="'/home/ben/test case/myfile'"

可悲的是,在魚中這不起作用。我應該怎麼做?

fish中的 alias 只是函式 builtin的包裝,它的存在是為了向後兼容 POSIX shell。aliasinfish不能用作POSIX 別名

如果你想要 POSIX 的等價物alias,你必須使用abbr,它是在fish 2.2.0中添加的:

abbr -a myfile "'/home/ben/test case/myfile'"

或者:

abbr -a myfile "/home/ben/test\ case/myfile"

這個答案是從評論區遷移過來的。

fish’salias只是一個熟悉的天真函式,它使用這個名稱(和 through eval)創建函式,發現它有問題也就不足為奇了。我認為你最好學習如何編寫魚函式。

對於您給出的範例,它轉換為以下行eval

function myfile --wraps /home/ben/test; /home/ben/test case/myfile $argv; end

因此使用alias myfile="'/home/ben/test case/myfile'"也無濟於事,因為它會給出一些愚蠢的輸出,例如--wraps 'home/ben/test; '/home/ben/test case/myfile'(看看那個孤獨的單引號!)

所以自己寫一個函式,你會發現 fish 就是這麼胡說八道,破壞了互動的樂趣和友好性:

function myfile --wraps '/home/ben/test case/myfile'; '/home/ben/test case/myfile' $argv; end

請注意,我還沒有真正測試過這個,只有當我對語法有正確的想法時它才有效。

f??????-id??tic-shell實際上,當我第一次閱讀它的內置功能時,我已經在 40 分鐘內獲得了足夠的內容。

引用自:https://unix.stackexchange.com/questions/231059