在 Shell 中,如何创建一个文件数组以及如何使用它与另一个文件进行比较?
In Shell, how can I make an array of files and how do I use it to then compare it to another file?
如何在 shell 中创建文件数组。只是
files = (file1.txt file2.txt file3.txt)
或者是
files = ("file1.txt" "file2.txt" "file3.txt)
如果稍后在程序中我想引用这个数组并选择一个特定的文件来读取,我该怎么做。我问是因为我想要一个条件来读取该文件并将其与输出文件进行比较。
我会这样做吗:(我知道我不能这样做)
if grep -q ${outputs[i]} output; then
#etc.
那我该怎么办呢?
赋值中=
两边没有空格,数组也不例外。
files=( file1.txt "file2.txt" )
如果文件名包含特殊字符,例如空格、括号等
您可以使用 for
循环遍历数组:
for file in "${array[@]}" ; do
if grep -q "$file" output ; then
您确定要使用 $file 作为正则表达式吗?然后你需要特殊处理正则表达式字符,即点、脱字符、美元符号等。
如果要比较两个文件的内容,请使用 diff
,而不是 grep
。
if diff -q "$file" output > /dev/null ; then
echo Same
else
echo Different
fi
如何在 shell 中创建文件数组。只是
files = (file1.txt file2.txt file3.txt)
或者是
files = ("file1.txt" "file2.txt" "file3.txt)
如果稍后在程序中我想引用这个数组并选择一个特定的文件来读取,我该怎么做。我问是因为我想要一个条件来读取该文件并将其与输出文件进行比较。
我会这样做吗:(我知道我不能这样做)
if grep -q ${outputs[i]} output; then
#etc.
那我该怎么办呢?
赋值中=
两边没有空格,数组也不例外。
files=( file1.txt "file2.txt" )
如果文件名包含特殊字符,例如空格、括号等
您可以使用 for
循环遍历数组:
for file in "${array[@]}" ; do
if grep -q "$file" output ; then
您确定要使用 $file 作为正则表达式吗?然后你需要特殊处理正则表达式字符,即点、脱字符、美元符号等。
如果要比较两个文件的内容,请使用 diff
,而不是 grep
。
if diff -q "$file" output > /dev/null ; then
echo Same
else
echo Different
fi