我在bash中编写for循环来运行命令,我需要在我的一个变量之后添加一个逗号。如果没有额外的空间,我似乎无法做到这一点。当我移动","在$bams
旁边,然后输出*.sorted
,
#!/bin/bash
bams=*.sorted
for i in $bams
do echo $bams ","
done;
输出应为:
'file1.sorted','file2.sorted','file3.sorted'
最终的最终目标是能够以上述格式将文件列表插入--flag
。不知道怎么做。
答案 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