Bash 变量未设置为if语句 order\u file=“订单” 读取顺序文件(){ 边读边做 #从订单文件获取文件和文件路径 b=$(echo$行| awk'{print$2}') a=“x86_64${b}” 回音$a 如果[-f$a] 然后 回音“ok” 其他的 回音“不” fi 完成
在上面的代码中,我使用while循环读取一个订单文件,并获得一个文件名,其中包含变量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
a
的路径。我需要检查文件是否存在。如果[-f$a],我使用,但条件总是失败。当Iecho$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")