当前位置:  开发笔记 > 编程语言 > 正文

如何在bash数组的所有条目中用下划线替换空格

如何解决《如何在bash数组的所有条目中用下划线替换空格》经验,为你挑选了1个好方法。

我正在尝试使用文件夹中的文件填充数组,但如果名称中有空格,则会将它们拆分并且数组中填充单个单词.这是我尝试用下划线替换空格的代码:

 array=($(ls)) | sed -r 's/ /_/g'

如何将ls项记录到bash数组中?



1> Charles Duff..:
array=( * )                  # populate array with filenames
array=( "${array[@]// /_}" ) # convert spaces to underscores in all array elements

解释:

array=( $(ls) )无法安全使用:非转义扩展扩展全局(如果你有一个名为的文件*,它将被其他名称列表替换)并默认拆分所有空格(意味着一个名为的文件two words将成为两个数组条目,第一个存在two,第二个存在words).此外,ls使用非打印字符的行为是未定义的,并且其包含文字换行符的文件的输出必然是不明确的.

"${foo// /_}"是shell变量的扩展foo,所有空格都用下划线替换.(${foo/ /_}将仅使用下划线替换第一个空格).对于数组,应用通常的语法更改:${foo[@]// /_}.在BashFAQ#100(如何在bash中进行字符串操作?)中全面描述了这种语法.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有