我写了一个必须显示主要参数的代码,但是当我编译它并输入“*”时,程序显示了我的文件结构。cmd 中的命令如下所示:program.exe 1 2 3 *
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const* argv[]) {
for (int i=0; i<argc; i++) printf("%s\n", argv[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果是:
program
1
2
3
program.c
program.exe
10-03-20
11-02-20
Run Code Online (Sandbox Code Playgroud)
我的问题:是否可以强制程序打印“*”而不是列出文件。
我写了一个bash脚本,以后需要做点什么.它被称为这样的东西:
later mv *.log /somewhere/else
Run Code Online (Sandbox Code Playgroud)
但是,当*.log调用时,这会在调用时扩展,并且脚本被调用就像我写的那样
later mv 1.log 2.log 3.log /somewhere/else
Run Code Online (Sandbox Code Playgroud)
我试图让我的脚本稍后扩展通配符.我试着这样称呼它
later mv '*.log' /somewhere/else
Run Code Online (Sandbox Code Playgroud)
而且\*,这些都导致通配符永远不会扩展.
如何在命令行中展开通配符?是否有一种方法可以在调用脚本时阻止扩展,即在输入原始参数时获取原始参数?
这是我的脚本的一部分,准备以后的调用:
tmpfile=$(mktemp)
### Get a quoted commandline
line=
while (( "$#" > 0 )); do
line="$line\"$1\" "
shift
done
### Prepare a script to be run
echo '#!/bin/bash' > "$tmpfile"
echo "cd $(pwd)" >> "$tmpfile"
echo "trap 'rm \"$tmpfile\"' EXIT" >> "$tmpfile"
echo "$line" >> "$tmpfile"
chmod 777 "$tmpfile"
Run Code Online (Sandbox Code Playgroud)
请注意,我必须引用命令行,因为我的一些文件和文件夹的名称中有空格; 如果我删除引号位,即使没有通配符的位也会停止工作.
这对你们来说非常简单,但我找不到这个问题的确定/正式答案.
假设我们在目录A中.然后,
"A/*"可能意味着:直接在A内的每个文件和文件夹.
"A/**"则可能意味着:A中的每个文件和文件夹,以及直接位于A内的每个子项内的每个文件和文件夹.(基本上,/*运算符的扩展遍历根文件夹的更深层) ?又名"/**"="/*/*")
我的"直接内部"术语可能是错误的.可能更好地说"直接孩子"或其他什么,但你明白了.
那么,"A/**/*"是什么意思?它等于"A/*/*/*"吗?
虽然这看起来很基本,但是当我没有运营商的正式定义时,它相当混乱.
我目前正在使用Javascript并尝试修改Gruntfile.但我想这些运营商可能出现在任何情况下.
我的程序必须监视与掩码匹配的文件.文件夹名称和掩码通过命令行参数传递.但是在我使用之前,面具会被第一场比赛取代!
双引号也没有效果,也没有其他符号.我尝试使用\或'保护输入.然而,这个符号将被添加到args中,这是我不想要的.知道怎么解决它?
public static void main(String[] args) throws IOException {
File dir = new File(args[0]);
String mask = args[1];
System.out.println(dir.getAbsolutePath());
System.out.println(mask);
String regex = args[2];
System.out.println(regex);
}
Run Code Online (Sandbox Code Playgroud)
正则表达式args[2]也替换为文件夹中的某些文件.
Input: "E:\Programming\Java\Task7" *.??? ...
Ouput: E:\Programming\Java\Task7 .git Task7.iml
Input: "E:\Programming\Java\Task7" *.????* [a-zA-Z]
Output: E:\Programming\Java\Task7 .idea [a-zA-Z]
Input: "E:\Programming\Java\Task7" '.???' ...
Output: E:\Programming\Java\Task7 '.???' ...
Input: "E:\Programming\Java\Task7" \\'.???'\\ ...
Output: E:\Programming\Java\Task7 \'.???'\ ...
Run Code Online (Sandbox Code Playgroud)
我知道使用引号或反斜杠并不是一个坏主意,但我认为存在更好的方法.
有没有办法在.yaml文件中定义snakemake配置字符串,以便它可以包含{wildcard}和{param}值,并且当在shell命令中使用该字符串时,{<name>}值将替换为"<name>"的实际值?
例如,假设您希望配置字符串定义要作为参数传递给程序的字符串格式:
RG:"ID:{ID} REP:{REP}"
其中上面是.yaml文件,ID和REP是通配符,shell命令会将展开的字符串作为参数传递给程序.