我试图用文件夹中的文件填充数组,但是如果它们的名字中有空格,它们就会被分割,数组中充满了单个单词。下面是我试图用下划线替换空格的代码:
array=($(ls)) | sed -r 's/ /_/g'如何将ls项记录到bash数组中?
发布于 2015-12-09 21:22:36
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?)中得到了全面的描述。https://stackoverflow.com/questions/34189211
复制相似问题