首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bash数组中的所有条目中用下划线替换空格

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

Stack Overflow用户
提问于 2015-12-09 21:20:12
回答 1查看 841关注 0票数 2

我试图用文件夹中的文件填充数组,但是如果它们的名字中有空格,它们就会被分割,数组中充满了单个单词。下面是我试图用下划线替换空格的代码:

代码语言:javascript
复制
 array=($(ls)) | sed -r 's/ /_/g'

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-09 21:22:36

代码语言:javascript
复制
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 (How do I do string manipulations in bash?)中得到了全面的描述。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34189211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档