首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将星号作为参数传递给bash中的另一个脚本

如何将星号作为参数传递给bash中的另一个脚本
EN

Stack Overflow用户
提问于 2015-04-12 23:54:24
回答 1查看 1.1K关注 0票数 0

一开始,我想保证我现在已经寻找了几个小时的答案,我已经读了很多类似的问题,但都没有解决我的问题。

现在直截了当地说:

我在bash中有两个脚本:一个是为我做一些事情的“工具”,第二个是主要的“为用户”脚本。我想向工具脚本传递各种模式(如"A-Za-z0-9*“或"&")

下面是一些代码:

代码语言:javascript
运行
复制
#!/bin/bash

SET() {

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

  echo $wz1
  echo $wz2


}
SET $1 $2

如果我像这样在内部声明模式,那么工具脚本实际上是有效的:

代码语言:javascript
运行
复制
line='[0-9A-Za-z]*'

但是当我将相同的模式传递给

代码语言:javascript
运行
复制
'\*'

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

我一直在尝试在工具中使用eval,如下所示:

代码语言:javascript
运行
复制
eval echo '$3'

但它并没有起作用。

完整的代码如下。

用户脚本:

代码语言:javascript
运行
复制
#!/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

工具代码

代码语言:javascript
运行
复制
#!/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

为了把事情弄清楚,我实际上并没有进入程序,因为我知道它的工作方式很奇怪,因为我在里面放了很多参数。

EN

回答 1

Stack Overflow用户

发布于 2015-04-13 00:08:41

报价,报价,报价和更多的报价。并且更喜欢$()而不是backticks,这样就省去了一些引用问题。

代码语言:javascript
运行
复制
#!/bin/bash

SET() {

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

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

(顺便说一句:函数名称全部大写是不常见的。这通常适用于环境变量。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29591382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档