1

我正在尝试编写一个 bash 脚本来定位当前目录中的单个文件。该文件将在稍后使用,但我不需要帮助。我尝试使用 ls 和 grep 但它不起作用,我是使用 bash 的新手。

#!/bin/sh
#Here I need smt like
#trFile = ls | grep myString (but I get file not found error)
echo $trFile
4

5 回答 5

1

使用 shell 通配符,如

ls *${pattern}*

并且,要将结果存储在变量中,请将其放入$()结构中(如果您喜欢使用不能很好嵌套的弃用功能,也可以使用弃用的反引号)

var=$( ls *${pattern}* )

或者,把你的 ls | grep 在那里(但这是不好的做法,恕我直言):

var=$( ls | grep -- "$pattern" )
于 2012-07-11T02:21:50.997 回答
0

我相信你正在寻找这样的东西:

    #!/bin/sh
    trFile=`ls | grep "$myString"`

为了运行命令并重定向/存储其输出,您需要将命令放在反引号之间。将存储输出、等号和反引号的变量需要放在一起,如我的示例所示。希望这可以帮助。

于 2012-07-11T02:21:53.690 回答
0
#!/bin/sh
#
trfile=$( ls | grep myString )
echo $trfile

$( xxx ) 导致其中的命令被执行并返回输出。

于 2012-07-11T02:22:03.520 回答
0

试试这个,如果我猜你想要做的是,通过grepping 的输出获取文件名的捕获ls到 shell 变量中,试试这个:

#!/bin/sh

trFile=`ls | grep "name_of_file"`
echo $trFile

注意命令周围的反引号运算符的用法,无论输出是什么,在这种情况下,都会被捕获。

于 2012-07-11T02:22:42.563 回答
0

当您最不期望时,使用 ls 的输出会咬人。更好地使用 Globbing。 http://tldp.org/LDP/abs/html/globbingref.html

于 2014-03-07T18:08:15.137 回答