Bash 输出文件内容,文件名存储在变量中
我有一个脚本,它收集不同目录下的文件名,根据特定模式对它们进行greps,然后将输出发送到另一个脚本。我在获取文件内容时遇到问题,我要么什么也得不到,要么“没有这样的文件或目录错误”。文件名中可能有空格,因此我尝试: 一, 二, 三,Bash 输出文件内容,文件名存储在变量中,bash,file,cat,Bash,File,Cat,我有一个脚本,它收集不同目录下的文件名,根据特定模式对它们进行greps,然后将输出发送到另一个脚本。我在获取文件内容时遇到问题,我要么什么也得不到,要么“没有这样的文件或目录错误”。文件名中可能有空格,因此我尝试: 一, 二, 三, FILECONTENT=$( 错误,因为我们通过省略“$”前缀来设置变量。此外,您将FILENAME变量设置为字符串CAT$FILENAME。而不是: FILENAME=$(cat $FILENAME) echo $FILENAME | grep "pattern
FILECONTENT=$(
错误,因为我们通过省略“$”前缀来设置变量。此外,您将FILENAME
变量设置为字符串CAT$FILENAME
。而不是:
FILENAME=$(cat $FILENAME)
echo $FILENAME | grep "pattern"
但在下一个名称中,您将灰显文件的内容,这可以在不将文件内容存储在其自身变量中的情况下完成,只需:
grep "pattern" "$FILENAME"
在第二次尝试中:
FILENAME=$(printf %q "$FILENAME")
$(cat "$FILENAME") | grep "pattern"
FILECONTENT=$(<"$FILENAME")
echo "$FILECONTENT" | grep "pattern"
出于某种原因,您需要将变量存储回自身。然后将该文件的内容复制到grep中。这也是不必要的(参见上面的解决方案)
最后,在最后一次尝试中:
FILENAME=$(printf %q "$FILENAME")
$(cat "$FILENAME") | grep "pattern"
FILECONTENT=$(<"$FILENAME")
echo "$FILECONTENT" | grep "pattern"
FILECONTENT=$(如果文件名开头正确,则可能值得测试:
[[ -f "$FILENAME" ]]
我会的,那么
if [[ -f "$FILENAME" ]]; then
grep "$pattern" "$FILENAME"
else
echo "$FILENAME does not exist" >&2
fi
当然,如果您使用grep“$pattern”“$FILENAME”
方法,grep也会让您知道不存在的文件。这是一个关于您希望控制错误条件的问题。您尝试过grep“pattern”“$FILENAME”
?
[[ -f "$FILENAME" ]]
if [[ -f "$FILENAME" ]]; then
grep "$pattern" "$FILENAME"
else
echo "$FILENAME does not exist" >&2
fi