[英]How to pass asterisk as argument to another script in 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
只是為了清除問題,我實際上並沒有進入程序,因為我知道由於我輸入的參數而使其工作很奇怪。
引號,引號,引號和更多引號。 並且更喜歡$()
而不是反引號,這樣可以節省一些引用問題。
#!/bin/bash
SET() {
wz1=$(./PREP2.sh "$1" "$2" '[0-9A-Za-z]*')
wz2=$(./PREP2.sh "$1" "$2" '&')
echo "$wz1"
echo "$wz2"
}
SET "$1" "$2"
(順便說一句:函數名稱全都大寫是不尋常的。這通常是環境變量。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.