在被添加到我的$ PATH的目錄中,我有以下文件:終端:如何將參數傳遞給別名?
filename="$1" day="$2" month="$3"
ruby -r "./SomeClass.rb" -e 'SomeClass.run($filename, $day, $month)'
假設此文件被稱爲SomeClass的。當我在終端輸入someclass時,我的系統將它識別爲有效的命令,並正確運行相應的Ruby文件。但是參數沒有被傳入。我如何將參數傳遞給別名?
在被添加到我的$ PATH的目錄中,我有以下文件:終端:如何將參數傳遞給別名?
filename="$1" day="$2" month="$3"
ruby -r "./SomeClass.rb" -e 'SomeClass.run($filename, $day, $month)'
假設此文件被稱爲SomeClass的。當我在終端輸入someclass時,我的系統將它識別爲有效的命令,並正確運行相應的Ruby文件。但是參數沒有被傳入。我如何將參數傳遞給別名?
如何將參數傳遞給別名?
不要使用alias
,最好爲此聲明一個function
。您可以輕鬆傳遞參數並在bash函數中執行其他操作:
someclass() {
# make sure enough arguments are passed in
# echo "$1 - $2 - $3";
filename="$1"; day="$2"; month="$3";
ruby -r "./SomeClass.rb" -e "SomeClass.run($filename, $day, $month)";
}
您正在使用單引號。將它們更改爲雙倍:
ruby -r "./SomeClass.rb" -e "SomeClass.run($filename, $day, $month)"
在單引號內不進行擴展。從bash manual:
3.1.2.2單引號
圍字符單引號(「'」)保留了引號內的每個字符的文本值。單引號之間可能不會出現單引號,即使前面加了反斜線。
3.1.2.3雙引號
圍護字符用雙引號(「「」)保留了引號中的所有字符的字面意義,‘$’,‘`’,‘\’外,當啓用歷史擴展時,'!'。字符'$'和'`'在雙引號內保留其特殊含義(請參閱Shell擴展)。只有在跟隨以下字符之一時,反斜線纔會保留其特殊含義: '$','`',''','\'或換行符。在雙引號內,刪除後跟其中一個字符的反斜槓。沒有特殊含義的字符之前的反斜槓未作修改。雙引號可以用雙引號括起來,前面加一個反斜槓。如果啓用,將會執行歷史擴展,除非使用雙引號出現的'!'使用反斜槓進行轉義。 '!'前的反斜槓不會被刪除。
我正在使用的引用上的一個有用的頁面是grymoire。
關於問題的標題,請檢查this question (Alias with variable in bash)及其答案:您不能也不得不使用函數。
@anishsane:感謝您對重要報價的更改,我從問題中刪除了錯誤的複製/粘貼。 – anubhava 2014-12-19 10:25:50
你是如何聲明一個函數的?這是一種腳本語言嗎?或者bash是否擁有內置的這種功能? – 2014-12-19 10:28:16
這完全支持BASH本身。你可以把這段代碼放在'〜/ .bashrc'中,然後函數就可以在任何地方使用。 – anubhava 2014-12-19 10:32:09