Linux BASH-基于变量创建和填充目录
我正在编写一个BASH脚本,循环遍历列表文件pt2.lst的内容,运行一个Perl脚本,并使用基于pt2.lst内容的文件名保存输出。以下代码起作用: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位数字 我
while read p; do
perl Collect_Vaf.pl $1 $p > "$p_vaf.lst"
done < pt2.lst
如何基于变量创建目录,然后将文件保存到循环中的那些目录中?
以下是可能相关或不相关的详细信息列表:
删除赋值运算符周围的空格。也就是说,与此相反: 你必须这样写:
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"