簡體   English   中英

如何在bash中將half命令分配給變量

[英]How can i assign half command to variable in bash

這個命令工作正常

find . -name "test"

但我想在shell腳本中這樣做

$FIND = "find . -name "

這樣我就可以使用$FIND "test"

但它不起作用

考慮一下聲明:

$Find = "find . -name "

這有兩個問題:

  1. shell要求在賦值中=周圍沒有空格。

  2. $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM