我的腳本由/ bin/sh解釋並使用getopts。當我這樣做:getopts和包含兩個'*'參數的問題
$ ./check_files.sh -d /tmp -td -x*a*
爲-x馬參數以及使用(末):
+ find /tmp/geany_socket.9912fb56 /tmp/gpg-OBxSqk /tmp/log /tmp/ssh-bfbl8kSNDM8o /tmp/systemd-private-0a769fff0c124fed8a42ec56733ade46-systemd-timesyncd.service-09Wbx1 /tmp/. /tmp/.. /tmp/.ICE-unix /tmp/.Test-unix /tmp/.X0-lock /tmp/.X11-unix /tmp/.XIM-unix /tmp/.font-unix /tmp/.xfsm-ICE-BILXKY -prune -type d ! -name *a*
但是,如果我取代 '一' 與 'I':
$ ./check_files.sh -d /tmp -td -x*i*
我得到這個:
+ find /tmp/geany_socket.9912fb56 /tmp/gpg-OBxSqk /tmp/log /tmp/ssh-bfbl8kSNDM8o /tmp/systemd-private-0a769fff0c124fed8a42ec56733ade46-systemd-timesyncd.service-09Wbx1 /tmp/. /tmp/.. /tmp/.ICE-unix /tmp/.Test-unix /tmp/.X0-lock /tmp/.X11-unix /tmp/.XIM-unix /tmp/.font-unix /tmp/.xfsm-ICE-BILXKY -prune -type d ! -name check_files.sh
的唯一原因,我有一個「我」在企業名稱中我的當前目錄中,這名被傳遞給find命令(而不是實際參數至極文件是*i*
。我測試了一些其他文件...
我沒有這個問題只有一個'*'的參數。
我試圖使用簡單和雙引號,但我得到了相同的結果。
有人解釋我爲什麼?
我使用shebang #!/usr/bin/env sh
哪個叫短劃線。我也用bash --posix
運行腳本,我有一個不同的結果,但仍然是我上面描述的同樣的問題。
按照要求通過@kenorb:
(x)
SEARCH_NAME_EXCLUDE="${OPTARG}";
(i)
SEARCH_NAME_INCLUDE="${OPTARG}";
;;
[…]
find_name_clause() {
if [ -n "$1" ]
then
FIND_NAME_CLAUSE=" -name $1 "
fi
if [ "$1" -a "$2" ]
then
FIND_NAME_CLAUSE="${FIND_NAME_CLAUSE} -a "
fi
if [ -n "$2" ]
then
FIND_NAME_CLAUSE="${FIND_NAME_CLAUSE} ! -name $2 "
fi
}
find_name_clause "${SEARCH_NAME_INCLUDE}" "${SEARCH_NAME_EXCLUDE}"
FIND_CLAUSE="${FIND_TYPE_CLAUSE} ${FIND_NAME_CLAUSE}"
[…]
nb_files() {
NB_FILES=$(find $1 $2 |wc -l)
}
nb_files "${search} ${FIND_CLAUSE}"
你能分享你的腳本的相關代碼,尤其是find命令?也許你應該將腳本作爲'-x'* a *''運行,因爲在你的腳本運行之前globbing會被展開。 – kenorb