在$ variable之后添加逗号

时间:2017-09-27 20:05:51

标签: bash whitespace

我在bash中编写for循环来运行命令,我需要在我的一个变量之后添加一个逗号。如果没有额外的空间,我似乎无法做到这一点。当我移动","在$bams旁边,然后输出*.sorted

#!/bin/bash

bams=*.sorted

for i in $bams
   do echo $bams ","
done;

输出应为:

'file1.sorted','file2.sorted','file3.sorted'

最终的最终目标是能够以上述格式将文件列表插入--flag。不知道怎么做。

3 个答案:

答案 0 :(得分:4)

首先,一个文字答案(如果您的目标是生成'foo','bar','baz'形式的字符串,而不是使用等同于somecommand --flag='foo','bar','baz'的命令行运行程序,这是完全不同的):

shopt -s nullglob               # generate a null result if no matches exist
printf -v var "'%s'," *.sorted  # put list of files, each w/ a comma, in var
echo "${var%,}"                 # echo contents of var, with last comma removed

或者,如果你不需要文字单引号(并且如果你将结果传递给其命令行上的另一个程序,单引号是句法而不是文字,你绝对不要他们):

files=( *.sorted )               # put *.sorted in an array
IFS=,                            # set the comma character as the field separator
somecommand --flag "${files[*]}" # run your program with the comma-separated list

答案 1 :(得分:0)

试试这个 -

lst=$( echo *.sorted | sed 's/ /,/g' ) # stack filenames with commas
echo $lst  

如果你真的需要围绕每个文件名的单一滴答,那么

lst="'$( echo *.sorted | sed "s/ /','/g" )'" # commas AND quotes

答案 2 :(得分:0)

#!/bin/bash

bams=*.sorted

for i in $bams
   do flag+="${flag:+,}'$i'"
done

echo $flag