![如何使用括号展开但使用逗号而不是空格作为输出中的分隔符?](https://linux22.com/image/144512/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%8B%AC%E5%8F%B7%E5%B1%95%E5%BC%80%E4%BD%86%E4%BD%BF%E7%94%A8%E9%80%97%E5%8F%B7%E8%80%8C%E4%B8%8D%E6%98%AF%E7%A9%BA%E6%A0%BC%E4%BD%9C%E4%B8%BA%E8%BE%93%E5%87%BA%E4%B8%AD%E7%9A%84%E5%88%86%E9%9A%94%E7%AC%A6%EF%BC%9F.png)
我需要这样做,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,