起初,我想确保我现在正在查找几个小时的答案,并且已经阅读了许多类似的问题,但是他们都没有解决我的问题。如何将星号作为参数传递给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
而只是为了澄清一些事情,我实在不进入程序,因为我知道那是因为我把参数的工作怪异进去。
一般来说,最好是使用'$(...)'符号,而不是反单引号。但是,这与您的问题中的问题是相切的。 –
为什么你要在''\ *''中加反斜线?为什么不使用''*''? –
我看到你的更新,我没有看到所有的'''我说你应该放在哪里,你必须把它们放到几乎无处不在,特别是在函数和所有回声的调用中,并且在所有调用prep2。 – Mat