Bash 变量未设置为if语句 order\u file=“订单” 读取顺序文件(){ 边读边做 #从订单文件获取文件和文件路径 b=$(echo$行| awk'{print$2}') a=“x86_64${b}” 回音$a 如果[-f$a] 然后 回音“ok” 其他的 回音“不” fi 完成

Bash 变量未设置为if语句 order\u file=“订单” 读取顺序文件(){ 边读边做 #从订单文件获取文件和文件路径 b=$(echo$行| awk'{print$2}') a=“x86_64${b}” 回音$a 如果[-f$a] 然后 回音“ok” 其他的 回音“不” fi 完成,bash,shell,Bash,Shell,在上面的代码中,我使用while循环读取一个订单文件,并获得一个文件名,其中包含变量a的路径。我需要检查文件是否存在。如果[-f$a],我使用,但条件总是失败。当Iecho$a时,它会显示正确的文件和路径。这是为什么?当您的订单文件的行以\r\n(Windows行结尾)结尾时,$a的名称中将包含一个\r。 您可以在运行脚本或更改脚本之前更改顺序\u文件: 将done行更改为 done < <( tr -d '\r' < $order_file) done

在上面的代码中,我使用while循环读取一个订单文件,并获得一个文件名,其中包含变量
a
的路径。我需要检查文件是否存在。如果[-f$a],我使用
,但条件总是失败。当I
echo$a
时,它会显示正确的文件和路径。这是为什么?

当您的订单文件的行以
\r\n
(Windows行结尾)结尾时,
$a
的名称中将包含一个
\r

您可以在运行脚本或更改脚本之前更改
顺序\u文件

done
行更改为

done < <( tr -d '\r' < $order_file)

done<变量
$a
是否引用文件或目录?如果是目录,则
-f
测试将返回false-这可能是问题所在吗?$a是文件名和路径ex:/var/www/index.htmlSo与正在执行的脚本在同一目录中是否有前缀为“x86_64”的文件?我们可以看到订单文件的摘要吗?与您的问题无关,但
echo$line | awk'{print$2}'
是一种反模式。让
read
为您拆分行:
同时读取大小路径u;;执行…
请查看
done < <( tr -d '\r' < "$order_file")