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

时间:2015-12-09 21:20:13

标签: arrays macos bash unix whitespace

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

expr2

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

1 个答案:

答案 0 :(得分:7)

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?)
  • 中详细描述了此语法