对于bash中的循环1到1
我对for循环有异议:对于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 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谢谢!!!花两个小时