每个变量字符串的printf pwd

时间:2019-03-14 10:58:08

标签: shell printf

我已经为变量分配了一些文件,现在我尝试打印此文件和txt文件的路径。 但是,它仅显示第一个文件的路径,而不显示变量中包含的其余文件的路径。

这是我的代码:

dbs=$(ls | grep -E "BNST|STN|NAc")

printf '%s\n' "$PWD/${dbs}" > ${sub}_DBSnuclei.txt

这是结果:

/Users/sbaldi/Desktop/WORK_DATA/OCD/ROIs_warped/Sub002/Sub002_BNST_50_L.nii.gz
Sub002_BNST_50_R.nii.gz

Sub002_NAc_80_L.nii.gz

Sub002_NAc_80_R.nii.gz

Sub002_STN_20_L.nii.gz

Sub002_STN_20_R.nii.gz

我想要每个文件的路径。我该怎么办?

3 个答案:

答案 0 :(得分:0)

您可以执行以下任一操作:

for i in *{BNST,STN,NAc}*; do echo "${PWD}/$i"; done
for i in *{BNST,STN,NAc}*; do readlink -f $i; done
find ${PWD} \( -name '*BNST*' -o -name '*STN*' -o -name '*NAc' \)
echo $PWD/*{BNST,STN,NAc}* | tr ' ' '\n'
find $PWD/*{BNST,STN,NAc}*

答案 1 :(得分:0)

为此仅使用xargs

<<<"$dbs" xargs -n1 printf "%s%s\n" "$(pwd)"

对于$dbs变量中的每一行,它将运行printf "%s%s\n" <pwd output> <line>

tutorialspoint上进行了测试。

答案 2 :(得分:0)

在示例输出中使用简单的文件名,您可以使用

printf "$PWD/%s\n" $dbs

解决方案的问题是printf看到一个参数。多行字符串的开头带有一个$PWD的一个参数。