如何将字符串变量作为全局参数传递给命令

扬·S

我有一个目录,其中包含一些要根据文件后缀合并在一起的tif文件(请注意文件名中的空格):

File1 P1.tif
File1 P2.tif
File1 P3.tif
File2 P1.tif
File2 P2.tif

应该导致合并的tif:

File1.tif
File2.tif

我有

for i in *\ P1.tif; do
    match=${i/\ P1/\ P*}
    out=${i/\ P1/}
    echo "processing $match"
    tiffcp "$match" "$out"
done

$match将包含File1 P*.tif并且$out将包含File1.tif但是tiffcp将第一个参数作为字符串处理,并且找不到匹配的文件。如果$match在文件名的空格中不使用引号将导致没有匹配的文件

所以问题是:如何将全局字符串作为参数传递给命令?

斯蒂芬·查泽拉斯

如果希望在参数扩展时执行通配符(顺便说一句,它是在调用命令之前由外壳执行的;该命令会看到生成的文件,而不是模式),那么您将在此保留参数扩展名。

保留参数扩展名不加引号的含义是单词拆分和全局匹配(有时称为概念上的split + glob运算符)。在这里,您只需要通配部分,因此您需要禁用拆分部分(通过将空值分配给特殊$IFS变量):

IFS= # disable splitting
for i in ./*\ P1.tif; do
    match=${i/\ P1/\ P*}
    out=${i/\ P1/}
    echo "processing $match"
    tiffcp $match "$out" # split+glob on $match
done

假定文件名的开头部分不包含通配符。或者,您可以执行以下操作:

for i in ./*\ P1.tif; do
    prefix=${i%\ P1.tif}
    out=$prefix.tif
    echo "processing $prefix"
    tiffcp "$prefix P"*.tif "$out"
done

这样,仅将*其用作glob运算符,并且该代码还具有仅使用标准sh语法的优点。

注意,全局扩展按词法排序,因此P10在P2之前。使用zsh及其numericglobsort选项(或nglob限定符)进行数字排序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将字符串作为参数传递给`do.call`命令?

BASH:如何将数组中的字符串作为参数传递给命令?

如何将字符串作为参数传递给需要R中的变量的函数

如何将字符串变量作为参数传递给awk

如何将字符串格式作为变量传递给f字符串

将 Ipython 变量作为字符串参数传递给 shell 命令

如何将道具传递给将参数作为不可变字符串的组件属性

如何将空字符串作为命令行属性传递给Spring?

如何将连接的字符串作为参数传递给函数:Angular 2

如何将JSON字符串作为查询参数传递给API Gateway

如何将字符串作为关键字参数传递给方法

如何将 JSON 字符串作为请求参数传递给其他服务

我如何将列表,数组或字符串作为参数传递给redshift

如何将字符串作为参数传递给javascript函数

如何将字符串作为参数传递给JavaScript函数?

如何将参数作为字符串传递给应该执行特定功能的外部

如何将bash变量作为字符串而不是数组传递给scala文件

如何将字符串传递给需要文件参数的Windows命令?

如何将字符串参数传递给jQuery

如何将选定的字符串传递给变量?

如何将参数作为类而不作为字符串传递给New-Object?

如何将数组作为实际参数而不是全局变量传递给函数

如何将包含斜杠('/')作为参数的字符串传递给vue.js中的路由

如何将MVC DropDownList的字符串值作为参数传递给控制器中的方法?

如何将Shell变量作为命令行参数传递给Shell脚本

使用R CMD BATCH时如何将字符串作为命令行参数传递

将字符串作为键参数传递给函数

将空格字符串作为参数传递给函数

将字符串作为参数传递给 python 脚本