Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 尝试使用相对表达式返回文件名_Bash - Fatal编程技术网

Bash 尝试使用相对表达式返回文件名

Bash 尝试使用相对表达式返回文件名,bash,Bash,因此,我试图使用bash返回对同一样本的两次读取,我需要为以下相同样本号的函数获取两个输入 但是,代码只返回样本号,如path/to/file/*\u S1\u*\ u read1\u*.fq.gz将通配符*保留在变量中 我也尝试过用^和~=引导,但都没有修复它。我觉得这很简单,但我无法确定我把事情搞砸了 例如,示例1的目标是使F1等于restoffilename\u S1\u read1\u restoffile.fq.gz引用处理包含空格的文件名的路径: for SAMPLE in {1..

因此,我试图使用bash返回对同一样本的两次读取,我需要为以下相同样本号的函数获取两个输入

但是,代码只返回样本号,如
path/to/file/*\u S1\u*\ u read1\u*.fq.gz
将通配符
*
保留在变量中

我也尝试过用
^
~=
引导,但都没有修复它。我觉得这很简单,但我无法确定我把事情搞砸了


例如,示例1的目标是使
F1
等于
restoffilename\u S1\u read1\u restoffile.fq.gz
引用处理包含空格的文件名的路径:

for SAMPLE in {1..6} 
do
#set input file 1 to "FL1", input file 2 to "FL2"
FL1=path/to/file/*_S${SAMPLE}_*_read1_*.fq.gz
FL2=path/to file/*_S${SAMPLE}_*_read2_*.fq.gz
{code continue to another funtion}
或者使用命令替换(记录在
manbash
中的“命令替换”部分):


如果存在匹配项,星号将不会展开。

FL1=(path/to/file/*\u S${SAMPLE}\u*\u read1.*.fq.gz)
通配符表达式在某些情况下只会展开到匹配文件名的列表中,而赋值的右侧不是其中之一。如何使用变量/文件名?因此,我有大量NGS样本(比如30个样本,每个样本读取2次),我需要通过一个清理程序运行它们,其中每个样本的每个命令都需要两个输入read 1和read 2,但输入文件必须来自同一个样本。在任何人询问生物信息学之前,表单会说这是一个bash问题,因为它与任何包无关。我会使用
/bin/ls
而不是裸
ls
。是的,如果
ls
有别名,这会有所帮助。或
命令ls
。答案更新在我的案例中,ls是.bashrc:
ls(){LC_COLLATE=“C”$LSBIN-la--ignore=lost+found--color=always--block size=“'1”“$@”|$LESSBIN-S}
。我不需要你对LSBIN和LESSBIN进行扩展我只想使用
echo
而不是
ls
(或它的任何变体)。通配符扩展将在文件名传递给任何命令之前完成,并且(希望)唯一要做的事情是查看每个文件,对其本身说“是的,那是一个文件”,然后打印它。“是的,那是一个文件”步骤是浪费时间,如果
ls
做了很多其他事情,那么很可能造成麻烦而不是帮助
echo
不需要任何麻烦,它只做了您需要的部分:打印它得到的参数。在做了更多的测试之后,我发现
FILE=dir/*.gz
FILE=$(echo dir/*.gz)
给出了相同的输出。当没有匹配项时,星号将不会展开。
FL1="path/to/file/*_S${SAMPLE}_*_read1_*.fq.gz"
FL1=$(echo "path/to/file/*_S${SAMPLE}_*_read1_*.fq.gz")