[英]How can i assign half command to variable in bash
這個命令工作正常
find . -name "test"
但我想在shell腳本中這樣做
$FIND = "find . -name "
這樣我就可以使用$FIND "test"
但它不起作用
考慮一下聲明:
$Find = "find . -name "
這有兩個問題:
shell要求在賦值中=
周圍沒有空格。
$Find
是變量的值。 它本身不是變量。
因此,要為Find
分配值,請使用:
Find="find . -name "
無法運行:
$Find test
這種方法既便攜又有限。 從長遠來看,最好使用數組來解決這類問題。
最后,最好不要對變量名使用全部大寫。 系統對其變量使用全部大寫,您不希望意外覆蓋變量。
可以為此定義一個數組,如下所示:
Find=(find . -name)
該數組可以如下使用:
"${Find[@]}" test
對於您展示的簡單示例,陣列解決方案與更簡單的變量解決方案之間沒有區別。 但是,一旦命令變得有點復雜並且需要引號或轉義,就必須使用數組。
請參閱BashFAQ#50:我正在嘗試將命令放在變量中,但復雜的情況總是會失敗! 。 簡短摘要:根據您實際嘗試完成的內容,使用函數或數組。
對於您的具體示例,我將使用一個函數:
find_name() {
find . -name "$1"
}
find_name "test"
使用eval
怎么樣? 如果你需要使用變量,這似乎是最簡單的方法。 它可能看起來像這樣:
find="find . -name"
eval $find test
但你應該小心eval
。
無論如何,如果你對變量沒有任何特殊要求, 別名或函數會更好。 別名絕對是最簡單的方法,功能更靈活(你可以放任何你需要的邏輯):
# alias
alias find="find . -name"
find test
# function
find() {
find . -name "$*"
}
find test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.