在bash脚本中将grep输出分配给变量时发生特定故障

在bash脚本中将grep输出分配给变量时发生特定故障,grep,variable-assignment,Grep,Variable Assignment,此代码块根据我正在测试的使用grep表达式的特性匹配一些文件,并将这些文件名的匹配部分完全按照我希望的方式输出到屏幕上 for filename in "$localpath"*; do echo "$filename" | grep -P -o '[0-9]{4}+' | head -1; done 但我需要将这些数据分配给一个变量,但没有成功。这就是我得到的 for filename in "$localpath"*; do tstring=$("$filename" |

此代码块根据我正在测试的使用grep表达式的特性匹配一些文件,并将这些文件名的匹配部分完全按照我希望的方式输出到屏幕上

for filename in "$localpath"*; do
    echo "$filename" | grep -P -o '[0-9]{4}+' | head -1;
done
但我需要将这些数据分配给一个变量,但没有成功。这就是我得到的

for filename in "$localpath"*; do
    tstring=$("$filename" | grep -P -o '[0-9]{4}+' | head -1);
    if [ -n "$tstring" ]; then
        .....
    fi
done
这会产生这样的输出,其中第25行是grep行

./numbers.sh: line 25: /home/ben/Desktop/Abe Shows/PhotoSpinner/PC242096.JPG: cannot execute binary file
./numbers.sh: line 25: /home/ben/Desktop/Abe Shows/PhotoSpinner/Photo_080108_002.jpg: cannot execute binary file
./numbers.sh: line 25: /home/ben/Desktop/Abe Shows/PhotoSpinner/purple waving grass w. mask.jpeg: cannot execute binary file
ben@Rowan:~/Desktop/Abe Shows$ 
编辑: 我试过用蜱虫来代替$(…),但这没有任何区别

谢谢你的帮助

本。

你错过了一个回声

tstring=$("$filename" | grep -P -o '[0-9]{4}+' | head -1); 
应该是:

tstring=$(echo "$filename" | grep -P -o '[0-9]{4}+' | head -1);

您在这里错过了一个
echo
tstring=$(“$filename”| grep-P-o'[0-9]{4}+'| head-1)如下:
tstring=$(echo“$filename”| grep-P-o'[0-9]{4}+'|head-1)谢谢。这很有效。你是我的英雄。我加上它作为回答,所以你可以接受它。