我有以下脚本:
#!/bin/bash
cat list.txt | while IFS='' read -r a;
#Remove all illegal characters
do
a=${a// /_}
a=${a// /_}
a=${a//\'/}
a=${a//-/_}
a=${a,,}
filepath="/applications/"
b=$filepath$a".csv"
echo $b
done
预期结果应该是:
/applications/ahold_region
/applications/alb_sfy_region
/applications/awg_census_region
/applications/bjs_total_ta
/applications/delhaize_region
/applications/dollar_value_area
真实结果是:
.csvlications/ahold_region
.csvlications/alb_sfy_region
.csvlications/awg_census_region
.csvlications/bjs_total_ta
.csvlications/delhaize_region
.csvlications/dollar_value_area
看起来 bash 正在使用.csv
替换 中的前 4 个字符$filepath
。
如何产生预期的结果?
答案1
我CRLF
不仅在脚本中,而且在list.txt
.在我更改为LF
shell 和后list.txt
,问题解决了。