如何使用ncatted批量添加编辑全局属性,解决外部参数文件引号问题
ncatted 批量传入全局属性的解决方案
你当前写法报错的核心原因是Bash执行$(cat ...)命令替换时,只会按空白拆分字符串,原本写在文件里的引号会被当成普通字符处理,不会作为参数边界的标识,带空格的多单词属性值会被拆分成多个独立参数。而且你把xargs写在命令替换里的写法,相当于把xargs输出的所有内容又交给Bash做了一次二次拆分,进一步破坏了参数边界,最终导致ncatted识别参数失败。
方案1:使用xargs直接读取参数文件(最便捷)
直接用xargs的文件读取参数功能,指定换行作为参数分隔符,即可保留每行的完整参数,不需要嵌套命令替换:
xargs -d '\n' -a global_attributes ncatted -h file.in file.out
如果你的系统xargs不支持-a参数(比如macOS默认自带的xargs),换用管道写法即可:
cat global_attributes | xargs -d '\n' ncatted -h file.in file.out
方案2:使用Bash数组(兼容性最好,无额外依赖)
如果不想依赖xargs,用Bash内置的数组功能存储参数,完全避免参数拆分问题,参数传递准确率最高:
# 按行读取属性文件内容到数组 readarray -t nc_args < global_attributes # 传入所有参数执行ncatted ncatted -h "${nc_args[@]}" file.in file.out
注意事项
- global_attributes文件中不要留空行,否则会传入空参数导致ncatted执行报错
- 如果属性值本身包含双引号,需要用反斜杠转义,例如值为
监控站点"北京A"需要写为"监控站点\"北京A\""
内容的提问来源于stack exchange,提问作者Saverio Guzzo
相关产品推荐
相关产品推荐

