文件名中的通配符在bash中不起作用

文件名中的通配符在bash中不起作用,bash,wildcard,git-bash,Bash,Wildcard,Git Bash,我知道这里有很多(很多!)类似的问题,但我还没有找到一个能解决我问题的。我有以下脚本: #!/bin/bash /* MAIN_CLASS and other declarations here */ numOfDatasets=10 for (( i=1; i <= $numOfDatasets; ++i )) do DATASET_FILE="C:\path\to\file\name_"$i"_100.fa" QUERY_FILE="C:\path\to\fil

我知道这里有很多(很多!)类似的问题,但我还没有找到一个能解决我问题的。我有以下脚本:

#!/bin/bash

/* MAIN_CLASS and other declarations here */

numOfDatasets=10

for (( i=1; i <= $numOfDatasets; ++i )) do
    DATASET_FILE="C:\path\to\file\name_"$i"_100.fa" 
    QUERY_FILE="C:\path\to\file\name_${i}_100_p"*".fasta"
    mvn exec:java -Dexec.mainClass="${MAIN_CLASS}" -Dexec.args="${DATASET_FILE} ${QUERY_FILE}"
done

直接在航站楼工作

尝试使用内部
for
循环,循环遍历通配符搜索结果:

for QUERY_FILE in "C:\path\to\file\name_${i}_100_p"*".fasta"; do
   /* do stuff with $QUERY_FILE */
done

您正在为
QUERY\u FILE
分配一个字符串值,但我认为您希望它是运行命令的结果。
试着这样做:

QUERY_FILE=`ls "C:\path\to\file\name_${i}_100_p"*".fasta" | head -1`
head-1
是指如果您希望匹配
*
中的第一个文件,则可以修改该文件以满足您的特定需要

完整示例:

#!/bin/bash

/* MAIN_CLASS and other declarations here */

numOfDatasets=10

for (( i=1; i <= $numOfDatasets; ++i )) do
    DATASET_FILE="C:\path\to\file\name_"$i"_100.fa" 
    QUERY_FILE=`ls "C:\path\to\file\name_${i}_100_p"*".fasta" | head -1`  
    mvn exec:java -Dexec.mainClass="${MAIN_CLASS}" -Dexec.args="${DATASET_FILE} ${QUERY_FILE}"
done
#/bin/bash
/*这里的MAIN_类和其他声明*/
numOfDatasets=10

for((i=1;我引用glob使其成为文本字符串,而不是expansion@DTSCode谢谢,我编辑了我的答案。尽管这两种方法对我都有效。我不知道如何操作。
abcd*
“abcd*”
几乎不同。for循环只运行一次,并且具有文本值
C:\path\to\file\name\u$I\u 100\u p*。fasta
(当然除了扩展的
i
之外)我在for循环中用
echo$F
测试了它,它打印了我所有的示例文件。但是我刚刚测试了更多,确实有一次迭代,所以
*
echo
中扩展。这意味着我的第一次测试是错误的,你是对的,谢谢!)不,不是这样。如果我使用
*.fasta
它会显示所有的文件(包括我的和你的文件)。它只是不把“*”识别为路径的一部分。你说,“我想分配给
QUERY\u FILE
的字符串是
name\u 1\u 100\u p95.fasta
”。那么为什么不直接分配它呢?
QUERY\u FILE=“C:\path\to\FILE\name\u${I}_100_p95.fasta“
。你为什么要使用
*
,你想用那个通配符做什么?你是对的,我想举个例子。它可能是
name_2_100_p79.fasta
name_3_100_p89.fasta
等等。我会相应地进行编辑。
#!/bin/bash

/* MAIN_CLASS and other declarations here */

numOfDatasets=10

for (( i=1; i <= $numOfDatasets; ++i )) do
    DATASET_FILE="C:\path\to\file\name_"$i"_100.fa" 
    QUERY_FILE=`ls "C:\path\to\file\name_${i}_100_p"*".fasta" | head -1`  
    mvn exec:java -Dexec.mainClass="${MAIN_CLASS}" -Dexec.args="${DATASET_FILE} ${QUERY_FILE}"
done