Bash 将命令输出分配给shell脚本中的变量

Bash 将命令输出分配给shell脚本中的变量,bash,shell,echo,Bash,Shell,Echo,我试图从csv文件中读取客户id列表,修剪前导的C并将其分配给变量。但是当我回显变量时,我发现了不同的行为 while IFS= read -r line; do id=$(echo -n $line | sed 's/^C//') echo ${id} done < "customer_ids.csv" 但是如果我使用echo-n,比如: while IFS= read -r line; do id=$(echo -n $line | sed 's/^C

我试图从csv文件中读取客户id列表,修剪前导的C并将其分配给变量。但是当我回显变量时,我发现了不同的行为

while IFS= read -r line; do
  id=$(echo -n $line | sed 's/^C//')
  echo ${id}
done < "customer_ids.csv"
但是如果我使用echo-n,比如:

while IFS= read -r line; do
  id=$(echo -n $line | sed 's/^C//')
  echo -n ${id}
done < "customer_ids.csv"
而IFS=read-r行;做
id=$(echo-n$行| sed's/^C/'))
echo-n${id}
完成<“客户ID.csv”

它不打印任何东西。如何知道分配给$id的实际值?

dos2unix customer_ids.csv
?将
set-x
放在脚本的开头,这样您就可以看到它在执行时做了什么。此外,您应该双引号引用所有变量引用,以避免奇怪的解析。为什么在
$()
中使用
echo-n
?我看不出它会有什么效果(如果你真的需要省去换行符,
printf“%s”“$id”
就不那么容易出现问题了)。谢谢大家。我认为你的两个答案都有帮助。我不熟悉shell脚本,很高兴向您学习:)问题出现在我的.csv文件中,每一行的结尾都是\r\n
while IFS= read -r line; do
  id=$(echo -n $line | sed 's/^C//')
  echo -n ${id}
done < "customer_ids.csv"