簡體   English   中英

字符串匹配在bash腳本中不起作用

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

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