我正在尝试编写一个 bash 脚本来定位当前目录中的单个文件。该文件将在稍后使用,但我不需要帮助。我尝试使用 ls 和 grep 但它不起作用,我是使用 bash 的新手。
#!/bin/sh
#Here I need smt like
#trFile = ls | grep myString (but I get file not found error)
echo $trFile
使用 shell 通配符,如
ls *${pattern}*
并且,要将结果存储在变量中,请将其放入$()
结构中(如果您喜欢使用不能很好嵌套的弃用功能,也可以使用弃用的反引号)
var=$( ls *${pattern}* )
或者,把你的 ls | grep 在那里(但这是不好的做法,恕我直言):
var=$( ls | grep -- "$pattern" )
我相信你正在寻找这样的东西:
#!/bin/sh
trFile=`ls | grep "$myString"`
为了运行命令并重定向/存储其输出,您需要将命令放在反引号之间。将存储输出、等号和反引号的变量需要放在一起,如我的示例所示。希望这可以帮助。
#!/bin/sh
#
trfile=$( ls | grep myString )
echo $trfile
$( xxx ) 导致其中的命令被执行并返回输出。
试试这个,如果我猜你想要做的是,通过grep
ping 的输出获取文件名的捕获ls
到 shell 变量中,试试这个:
#!/bin/sh
trFile=`ls | grep "name_of_file"`
echo $trFile
注意命令周围的反引号运算符的用法,无论输出是什么,在这种情况下,都会被捕获。
当您最不期望时,使用 ls 的输出会咬人。更好地使用 Globbing。 http://tldp.org/LDP/abs/html/globbingref.html