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

标签 arrays macos bash unix whitespace

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

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

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

最佳答案

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

解释:

  • array=( $(ls) ) 不能安全使用:非转义扩展扩展了 glob(如果你有一个名为 * 的文件,它将被替换为其他名称的列表)并默认在所有空格上拆分(这意味着名为 two words 的文件将成为两个数组条目,第一个是 two,第二个是 单词)。此外,ls 对不可打印字符的行为是未定义的,它的包含文字换行符的文件的输出必然是模棱两可的。
  • "${foo///_}" 是 shell 变量 foo 的扩展,所有空格都替换为下划线。 (${foo//_} 只会用下划线替换第一个空格)。对于数组,应用了通常的语法更改:${foo[@]///_}BashFAQ #100 (How do I do string manipulations in bash?) 中全面描述了此语法.

关于arrays - 如何在 bash 数组中的所有条目中用下划线替换空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34189211/

相关文章:

java - [Java]插入int时字符串数组中的空值

python - 用 cython 添加数组比 numpy 慢?

php - 运行 PHP 时 Brew 库版本不匹配

Bash 脚本 - 文件目录不存在

bash - 在 unix、bash 中合并 csv 文件

c# - 将 XmlSerializer 与根元素中的数组一起使用

javascript - 将对象插入数组

java 7 更新导致启动器出现在 mac 应用程序切换器中

javascript - macOS 应用程序中的 WKWebView Web 检查器无法呈现和闪烁/闪烁

linux - 使用字符串将 Bash Shell 脚本输出保存到文件中