使用UNIX/Linux,一个简单的解决方案是:
for i in $(< mylist.txt ); do if [ ! -r $i ] ; then echo "file missing! $i" exit 1 fi done
字符串然而,如果每行只指定一个文件,但文件名可能包含空格,则会中断。文件名中的空格在用户中很流行,但程序员不喜欢,这是有原因的。我尝试添加引号,但这不起作用:在for命令中,空格被视为空格。我怎么能用简单的方法解决这个问题呢?
vuv7lop31#
for循环总是在空白处分割输入。我们可以将输入分隔符IFS改为仅使用换行符作为分隔符:
for
IFS
#!/bin/sh ( IFS=' ' for i in $(cat mylist.txt) do if [ ! -r "$i" ] then echo "file missing! $i" >&2 exit 1 fi done )
字符串一个更简单的and better替代方案是在while循环中使用read:
while
read
#!/bin/sh while IFS= read -r i do if [ ! -r "$i" ] then echo "file missing! $i" >&2 exit 1 fi done <mylist.txt
型还请注意,我们需要在[命令中引用$i的扩展,错误消息应该转到错误流。此外,它只使用可移植的结构;没有必要将其限制为只使用Bash。
[
$i
e0bqpujr2#
这里有一个简单的解决方案,“read”命令一次读取一行:
cat mylist.txt | while read i; do if [ ! -r "$i" ] ; then echo "file missing! $i" exit 1 fi done
字符串
2条答案
按热度按时间vuv7lop31#
for
循环总是在空白处分割输入。我们可以将输入分隔符
IFS
改为仅使用换行符作为分隔符:字符串
一个更简单的and better替代方案是在
while
循环中使用read
:型
还请注意,我们需要在
[
命令中引用$i
的扩展,错误消息应该转到错误流。此外,它只使用可移植的结构;没有必要将其限制为只使用Bash。
e0bqpujr2#
这里有一个简单的解决方案,“read”命令一次读取一行:
字符串