Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 输出文件内容,文件名存储在变量中_Bash_File_Cat - Fatal编程技术网

Bash 输出文件内容,文件名存储在变量中

Bash 输出文件内容,文件名存储在变量中,bash,file,cat,Bash,File,Cat,我有一个脚本,它收集不同目录下的文件名,根据特定模式对它们进行greps,然后将输出发送到另一个脚本。我在获取文件内容时遇到问题,我要么什么也得不到,要么“没有这样的文件或目录错误”。文件名中可能有空格,因此我尝试: 一, 二, 三, FILECONTENT=$( 错误,因为我们通过省略“$”前缀来设置变量。此外,您将FILENAME变量设置为字符串CAT$FILENAME。而不是: FILENAME=$(cat $FILENAME) echo $FILENAME | grep "pattern

我有一个脚本,它收集不同目录下的文件名,根据特定模式对它们进行greps,然后将输出发送到另一个脚本。我在获取文件内容时遇到问题,我要么什么也得不到,要么“没有这样的文件或目录错误”。文件名中可能有空格,因此我尝试:

一,

二,

三,

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