簡體   English   中英

bash參數擴展作為命令的參數

[英]bash parameter expansion as arguments to command

我在嘗試傳遞bash參數來find參數時遇到困難。

最好通過代碼解釋:

$ echo $BASH_VERSION
4.1.2(1)-release

$ find /etc -path '*/init.d' 2>/dev/null | wc -l
2

$ args="-path '*/init.d'"
$ echo $args
-path '*/init.d'
$ find /etc $args 2>/dev/null | wc -l
0

$ set -x; !!
set -x; find /etc $args 2>/dev/null | wc -l
+ wc -l
+ find /etc -path ''\''*/init.d'\'''
0

set -x輸出中多余''引號從哪里來?

我嘗試了多種方法來使它起作用,但到目前為止還沒有成功。 該指南似乎表明這應該可行,因為參數擴展發生在命令執行之前: http : //stuff.lhunath.com/parser.png

使用數組:

args=( -path '*/init.d' )
find /etc "${args[@]}"

BashFAQ#50中詳細討論了另一種方法不起作用的原因。 簡而言之:引號字符是在語法解析期間進行的- 參數擴展發生之前 因此,當引號字符來自參數擴展時,它們不會被解析為語法,而是被視為任何其他數據:通過字符串拆分和glob擴展運行,並傳遞給正在運行的程序。

set -x輸出中的額外引號/轉義set -x正好是Shell告訴您主引號是數據的方式,將它們與以語法形式出現的引號區分開來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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