起初我想确保我现在正在寻找几个小时的答案,我已经阅读了很多类似的问题,但没有一个能解决我的问题。
直截了当:
我在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]*'
但是当我用
传递相同的模式时'\*'
我无法摆脱" \"没有解释" *" as"显示目录中的所有文件"。
我一直试图在工具中使用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
只是为了澄清事情,我实际上并没有进入程序,因为我知道它的工作很奇怪,因为我投入了它。
答案 0 :(得分: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"
(顺便说一句:函数名全部大写是很常见的。通常用于环境变量。)