Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_Command Line_Wildcard - Fatal编程技术网

在Bash中将通配符匹配用作命令行参数

在Bash中将通配符匹配用作命令行参数,bash,loops,command-line,wildcard,Bash,Loops,Command Line,Wildcard,我正试图编写一个Bash脚本来转换一堆文件 假设我有一个目录/path/to/my files/,其中包含三个文本文件:a b.txt、c d.txt和e.txt(注意空格) 我需要能够像这样调用脚本: $ ./myscript.sh /path/to/my\ files/*.txt dest='/desktop/' for ARG in $@; do /some/other/script $ARG $dest$ARG.new done 然后在bash中循环处理它们,如下所示: $ ./

我正试图编写一个Bash脚本来转换一堆文件

假设我有一个目录
/path/to/my files/
,其中包含三个文本文件:
a b.txt
c d.txt
e.txt
(注意空格)

我需要能够像这样调用脚本:

$ ./myscript.sh /path/to/my\ files/*.txt
dest='/desktop/'
for ARG in $@; do
  /some/other/script $ARG $dest$ARG.new
done
然后在bash中循环处理它们,如下所示:

$ ./myscript.sh /path/to/my\ files/*.txt
dest='/desktop/'
for ARG in $@; do
  /some/other/script $ARG $dest$ARG.new
done

它不必像这样工作,任何最简单的方法都会产生类似的结果,Bash在执行命令之前进行通配符扩展,即用匹配文件列表替换该表达式。

这是否满足您的需要:

dest='/desktop/'
for ARG in "$@"; do
  /some/other/script "$ARG" "$dest$ARG.new"
done
编辑:删除ARG上的路径

dest='/desktop/'
for ARG in "$@"; do
  /some/other/script "$ARG" "$dest$(basename "$ARG").new"
done

“$@”
让我走到了一半。理想情况下,我希望$ARG只包含文件名,这样
$dest$ARG
就不会有太大的路径。有没有一种简单的方法可以做到这一点?你甚至可以将ARG的代码缩短为
-默认情况下使用
$@