我需要这样做,IFS=",";echo {1..5}
以便它可以输出1,2,3,4,5
而不是1 2 3 4 5
.如何使 bash echo {1..5} 并用逗号输出值?
答案1
使用 Bash 的内置函数:
这有点难看,因为我们需要分隔5
以避免尾随逗号:
$ printf '%s,' {1..4}; echo 5
1,2,3,4,5
虽然sinceprintf
可以直接输出到变量,但是可以解决这个问题,并通过参数扩展删除最后的逗号:
$ printf -v tmpvar "%s," {1..5}; echo "${tmpvar%,}"
1,2,3,4,5
或者 with "$*"
,它使用 的第一个字符进行连接IFS
。这会破坏全局状态,但您可以通过在子 shell 或函数中运行它来轻松避免这种情况local IFS
:
$ IFS=,; set -- {1..5}; echo "$*";
1,2,3,4,5
如果限制在变量中,则最简单的方法可能是使用循环手动执行此操作,因为您不能使用变量作为大括号扩展范围中的端点。同样,上限是在特殊情况下:
a=1; b=5
for (( i=a ; i<b ; i++ )); do
printf "$i,";
done;
printf "$b\n"
答案2
尝试使用:
seq --separator="," 1 5
答案3
由于您使用的是数字大括号扩展,因此唯一出现的空格是数字之间的空格,因此您可以对结果进行后处理:
output=$(echo {1..5} | tr ' ' ',')
或者
output=$(echo {1..5} | sed 's/ /,/g')
答案4
如果您允许空格和逗号,请尝试
$ echo {1..5},
1, 2, 3, 4, 5,