Linux BASH-基于变量创建和填充目录

Linux BASH-基于变量创建和填充目录,linux,bash,loops,Linux,Bash,Loops,我正在编写一个BASH脚本,循环遍历列表文件pt2.lst的内容,运行一个Perl脚本,并使用基于pt2.lst内容的文件名保存输出。以下代码起作用: while read p; do perl Collect_Vaf.pl $1 $p > "$p_vaf.lst" done < pt2.lst 如何基于变量创建目录,然后将文件保存到循环中的那些目录中? 以下是可能相关或不相关的详细信息列表: 文件pt2.lst是使用bash脚本生成的。每行包含一个4-5位数字 我

我正在编写一个BASH脚本,循环遍历列表文件pt2.lst的内容,运行一个Perl脚本,并使用基于pt2.lst内容的文件名保存输出。以下代码起作用:

while read p; do
        perl Collect_Vaf.pl $1 $p > "$p_vaf.lst"
done < pt2.lst
如何基于变量创建目录,然后将文件保存到循环中的那些目录中?

以下是可能相关或不相关的详细信息列表:

  • 文件pt2.lst是使用bash脚本生成的。每行包含一个4-5位数字
  • 我打算通过在循环中运行多个脚本,将几个文件保存到每个新创建的目录中;为了简单起见,我只包含了一个
  • BASH脚本使用单个必需参数$1运行,该参数用作脚本的许多命令的输入文件

  • 删除赋值运算符周围的空格。也就是说,与此相反:

    你必须这样写:

    STR="Sample_$p"
    
    另一个问题是:

    应该是:

    perl Collect_Vaf.pl $1 $p > "$STR/${p}_vaf.lst"
    

    因为,根据错误消息,没有名为
    $p\u vaf
    的变量。这也意味着,当您将第一个示例描述为“它起作用”时,肯定不是这样。

    赋值中没有空格:
    STR=“Sample_$p”
    是一个有效的标识符字符,
    $p\u vaf
    不是一个变量,请使用
    ${p}\u vaf
    $p\\u vaf
    “$p”\u vaf
    等。谢谢您的帮助。在定义变量时,我没有意识到空格的重要性。但是,我向您保证,我发布的第一段代码肯定会起作用。它为pt2.lst中包含Perl脚本输出的每一行生成一个文件。我不知道为什么它对我有用,因为你的观点很好,$p_vaf不是一个定义的变量;但它确实有效。我将在我的问题中包含版本信息,以防它有助于解释这个奇怪的问题。我刚刚弄明白了:我的第一个示例之所以有效,是因为Perl脚本写入了一个基于第二个命令行参数命名的文件,$p。
    STR = "Sample_$p"
    
    STR="Sample_$p"
    
    perl Collect_Vaf.pl $1 $p > "$STR/$p_vaf.lst"
    
    perl Collect_Vaf.pl $1 $p > "$STR/${p}_vaf.lst"