如何在 bash shell 脚本中正确处理通配符扩展?

ian*_*its 3 unix linux bash shell

#!/bin/bash

hello()
{
    SRC=$1
    DEST=$2

    for IP in `cat /opt/ankit/configs/machine.configs` ; do
        echo $SRC | grep '*' > /dev/null
        if test `echo $?` -eq 0 ; then
            for STAR in $SRC ; do
                echo -en "$IP"
                echo -en "\n\t ARG1=$STAR ARG2=$2\n\n"
            done
        else
            echo -en "$IP"
            echo -en "\n\t ARG1=$SRC ARG2=$DEST\n\n"
        fi
    done
}

hello $1 $2
Run Code Online (Sandbox Code Playgroud)

上面是我提供源(SRC)和目标(DEST)路径的shell脚本。当我没有放入带有通配符“ ”的 SRC 路径时,它工作得很好。当我运行这个 shell 脚本并给出 ' '.pdf 或 '*' 时,如下所示:

root@ankit1:~/as_prac# ./test.sh /home/dev/Examples/*.pdf /ankit_test/as
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

192.168.1.6
ARG1=/home/dev/Examples/case_Contact.pdf ARG2=/home/dev/Examples/case_howard_county_library.pdf
Run Code Online (Sandbox Code Playgroud)

DEST 是 /ankit_test/as 但 DEST 也会由于“*”而被操纵。预期的答案是

ARG1=/home/dev/Examples/case_Contact.pdf ARG2=/ankit_test/as
Run Code Online (Sandbox Code Playgroud)

所以,如果你明白我想要做什么,请帮助我解决这个BUG。我会很感激你的。

提前致谢!!!

我需要确切地知道如何在程序中一一使用“*.pdf”而不干扰 DEST。

agn*_*nul 5

shell 将扩展通配符,除非您转义它们,例如,如果您有

$ ls
one.pdf two.pdf three.pdf
Run Code Online (Sandbox Code Playgroud)

并运行你的脚本

./test.sh *.pdf /ankit__test/as
Run Code Online (Sandbox Code Playgroud)

它将与

./test.sh one.pdf two.pdf three.pdf /ankit__test/as
Run Code Online (Sandbox Code Playgroud)

这不是你所期望的。正在做

./test.sh \*.pdf /ankit__test/as
Run Code Online (Sandbox Code Playgroud)

应该管用。