[英]String matching not working in bash script
這很奇怪..主要是因為它昨晚有效。 我有一個在表達式中傳遞的腳本,該表達式應該與數組中的文件名匹配。 但是我不允許使用find
(這是一項任務)。
例如,如果用戶傳入參數'*.c'
,而我有以下文件'*.c'
來檢查:
~/dir/text1.txt
~/dir/no.c
~/dir/no.sh
我在這樣的函數中進行比較:
process ()
{
local new_cur=()
for i in "${files[@]}"; do
if [[ "$i" == "$1" ]]; then
new_cur+=("$i")
fi
done
}
然后,我在bash腳本中這樣稱呼它,其中arguments[1]
= = '*.c'
:
process "${arguments[1]}"
在我的process
函數內部,我檢查了字符串*.c
並傳入了文件,並且傳入了文件。但是,它沒有在函數中傳遞if
語句。
請注意,即使沒有通配符的簡單字符串也無法使用。
編輯:我也查找了常見的解決方案,無論出於何種原因都沒有用。 這是我嘗試過的:
if [ "$i" == "$1" ]
if [ "$1" == "$i" ]
if [ "$i" = "$1" ]
if [ "$1" = "$i" ]
if [[ "$1" = "$i" ]]
if [[ "$i" = "$1" ]]
if [[ "$1" == "$i" ]]
if [[ "$i" == *"$1"* ]]
到目前為止,以上方法均無效。
首先將glob聲明為變量,然后在測試中使用該變量。 因此,聲明:
var="$1" then [ $i == $var ]
這樣做的原因是在測試之前強制bash擴展通配符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.