2015-04-12 114 views
0

起初,我想确保我现在正在查找几个小时的答案,并且已经阅读了许多类似的问题,但是他们都没有解决我的问题。如何将星号作为参数传递给bash中的另一个脚本

直到现在的地步:

我在bash两个脚本:一个是“工具”,对我做一些东西,第二个是主要的“用户”的脚本。 我想传递给这个工具脚本各种模式(如 “[A-ZA-Z0-9] *” 或 “&”)

这里是一些代码:

#!/bin/bash 

SET() { 

    wz1=`./PREP2.sh $1 $2 '[0-9A-Za-z]\*'` 
    wz2=`./PREP2.sh $1 $2 '&'` 

    echo $wz1 
    echo $wz2 


} 
SET $1 $2 

工具脚本实际工作,如果我内声明的模式是这样的:但是

line='[0-9A-Za-z]*' 

当我通过相同的模式与

'\*' 

如果不将“*”解释为“显示目录中的所有文件”,我无法摆脱“\”。

我一直在试图使用这样的工具里面的eval:

eval echo '$3' 

但没有奏效。

完整代码后续。

用户脚本:

#!/bin/bash 

SET() { 
    #echo '[0-9A-Za-z]*' 

    wzor1=$(./PREP2.sh "$1" "$2" '[0-9A-Za-z]*') 
    wzor2=`./PREP2.sh $1 $2 '&'` 

    echo $wzor1 
    echo $wzor2 
} 

SET $1 $2 $4 

工具代码

#!/bin/bash 


PREP2() { 
    #echo "$3" 
    wzor="`./PREP.sh $1 $2 | tee linie.txt`" 
    #tmp="`echo $wzor | sed 's/,/,%/'`" 
    #echo $tmp; 

    ./ZAMIEN_WSZYSTKIE_WYSTAPIENIA.sh linie.txt , @% 


    #tmp="`echo $wzor | tr '@' '\n x' | tee linie.txt`" 
    tmp="`tr '@' '\n x' < linie.txt | tee linie.txt`" 
    llini=`echo "$tmp" | wc -l` 

    #echo liczba lini $llini 

    i=1 
    wzor="" 
    while [ $i -le $llini ]; 
    do 

     linia="`eval sed -n -e $i\p linie.txt | cut -d '%' -f2`" 
     if [ -z "$linia" ];then 
     #linia='[0-9A-Za-z]*' 

     linia=`eval '$3'` 
     #echo $linia 
     fi 

     if [ $i -ne 1 ];then 
      #echo "kolejna wartosc" 
      wzor=$wzor\,$linia 
     else 
      #echo "pierwsza wartosc" 
      wzor=$linia 
     fi 

     i=`expr $i + 1` 
    done 
    echo $wzor 
    #wynik="`grep -v "$wzor" $1`" 
    #echo "$wynik" > $1 
    #echo $nowy_wpis >> $1 

} 

eval echo "$3" 
#PREP2 $1 $2 $3 

而只是为了澄清一些事情,我实在不进入程序,因为我知道那是因为我把参数的工作怪异进去。

+1

一般来说,最好是使用'$(...)'符号,而不是反单引号。但是,这与您的问题中的问题是相切的。 –

+1

为什么你要在''\ *''中加反斜线?为什么不使用''*''? –

+0

我看到你的更新,我没有看到所有的'''我说你应该放在哪里,你必须把它们放到几乎无处不在,特别是在函数和所有回声的调用中,并且在所有调用prep2。 – Mat

回答

2

报价,报价,报价和更多的报价。并且倾向于$()反引号,这可以节省一些报价问题。

#!/bin/bash 

SET() { 

    wz1=$(./PREP2.sh "$1" "$2" '[0-9A-Za-z]*') 
    wz2=$(./PREP2.sh "$1" "$2" '&') 

    echo "$wz1" 
    echo "$wz2" 
} 
SET "$1" "$2" 

(BTW:。这是不寻常的函数名全部大写这通常对环境变量)

+0

对不起,它不工作。在我的工具脚本中使用echo $ 3它显示我的目录中的所有文件 – zajer

+1

不要'echo $ 3','echo'$ 3“' – Mat

+0

不行,我恐怕 – zajer

相关问题