[英]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.