对于bash中的循环1到1

对于bash中的循环1到1,bash,for-loop,Bash,For Loop,我对for循环有异议: for file in "$list" do if [ ! -f "$file" ]; then final_list="$final_list $file" fi done 在$list中存储了一些文件file1 file2 file3,我需要检查每个单词是否存在同名文件。如果我在$list中有不止一个单词,那么它工作得很好。但如果$list只包含一个单词

我对for循环有异议:

for file in "$list"
        do
            if [ ! -f "$file" ]; then
                final_list="$final_list $file"
            fi
        done 
在$list中存储了一些文件file1 file2 file3,我需要检查每个单词是否存在同名文件。如果我在$list中有不止一个单词,那么它工作得很好。但如果$list只包含一个单词,它就不起作用了。变量$final_列表为空


谢谢

问题在于双引号。它们防止在$list上拆分单词,因此$file包含整个$list

但是,当条件检查是否不存在时,单个文件将使条件失效,但是对于像
'file1 file2'
这样的列表,由于该名称的文件不存在,整个列表将分配给$final\u list


尝试使用
set-xv
运行脚本以查看发生了什么。

问题在于双引号。它们防止在$list上拆分单词,因此$file包含整个$list

但是,当条件检查是否不存在时,单个文件将使条件失效,但是对于像
'file1 file2'
这样的列表,由于该名称的文件不存在,整个列表将分配给$final\u list


尝试使用
set-xv
运行脚本以查看发生了什么。

问题在于双引号。它们防止在$list上拆分单词,因此$file包含整个$list

但是,当条件检查是否不存在时,单个文件将使条件失效,但是对于像
'file1 file2'
这样的列表,由于该名称的文件不存在,整个列表将分配给$final\u list


尝试使用
set-xv
运行脚本以查看发生了什么。

问题在于双引号。它们防止在$list上拆分单词,因此$file包含整个$list

但是,当条件检查是否不存在时,单个文件将使条件失效,但是对于像
'file1 file2'
这样的列表,由于该名称的文件不存在,整个列表将分配给$final\u list


尝试使用
set-xv运行脚本以查看发生了什么。

您还有其他问题。它可以在
$list
中使用单个文件。当您认为
$list
中只有一个文件时,请仔细检查
$list
中实际上有一个文件。e、 g.
list=dog;对于$list中的i;不要重复$i;完成
工作正常。不要使用字符串作为列表,使用bash数组。如果您的文件名实际上是
file1
file2
等,您可以执行
final\u list=(文件?
)。您可能应该使用
shopt-s nullglob
启用
nullglob
,这样在没有文件的情况下,您就不会得到包含
文件的数组。
。将
中的“$list”
替换为
中的$list
。您还知道您正在检查$file是否不存在?@DavidC.Rankin谢谢!!!如果你有其他问题,花两个小时在上面。它可以在
$list
中使用单个文件。当您认为
$list
中只有一个文件时,请仔细检查
$list
中实际上有一个文件。e、 g.
list=dog;对于$list中的i;不要重复$i;完成
工作正常。不要使用字符串作为列表,使用bash数组。如果您的文件名实际上是
file1
file2
等,您可以执行
final\u list=(文件?
)。您可能应该使用
shopt-s nullglob
启用
nullglob
,这样在没有文件的情况下,您就不会得到包含
文件的数组。
。将
中的“$list”
替换为
中的$list
。您还知道您正在检查$file是否不存在?@DavidC.Rankin谢谢!!!如果你有其他问题,花两个小时在上面。它可以在
$list
中使用单个文件。当您认为
$list
中只有一个文件时,请仔细检查
$list
中实际上有一个文件。e、 g.
list=dog;对于$list中的i;不要重复$i;完成
工作正常。不要使用字符串作为列表,使用bash数组。如果您的文件名实际上是
file1
file2
等,您可以执行
final\u list=(文件?
)。您可能应该使用
shopt-s nullglob
启用
nullglob
,这样在没有文件的情况下,您就不会得到包含
文件的数组。
。将
中的“$list”
替换为
中的$list
。您还知道您正在检查$file是否不存在?@DavidC.Rankin谢谢!!!如果你有其他问题,花两个小时在上面。它可以在
$list
中使用单个文件。当您认为
$list
中只有一个文件时,请仔细检查
$list
中实际上有一个文件。e、 g.
list=dog;对于$list中的i;不要重复$i;完成
工作正常。不要使用字符串作为列表,使用bash数组。如果您的文件名实际上是
file1
file2
等,您可以执行
final\u list=(文件?
)。您可能应该使用
shopt-s nullglob
启用
nullglob
,这样在没有文件的情况下,您就不会得到包含
文件的数组。
。将
中的“$list”
替换为
中的$list
。您还知道您正在检查$file是否不存在?@DavidC.Rankin谢谢!!!花两个小时