如何使用括号展开但使用逗号而不是空格作为输出中的分隔符?

如何使用括号展开但使用逗号而不是空格作为输出中的分隔符?

我需要这样做,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,

相关内容