arrays - 用 bash 替换数组中的字符串

标签 arrays bash

我只需要使用 bash 并且我是新手

#!/opt/bin/bash
SAVEIFS=$IFS
IFS=$'\n'
array=($(mysql --host=xxxx --user=xxxx --password=xxxx -s -N -e 'use xbmc_video; SELECT strFilename FROM movie, files WHERE files.idFile=movie.idFile ORDER BY idMovie DESC LIMIT 10;'))

自从我在 Windows samba 共享上工作以来,这会生成一个文件名数组,其中包含空格。问题是如何删除每个字符串中的最后 4 个符号以摆脱扩展名,而不必担心我想要获取纯文件名的扩展名

最佳答案

将此添加到脚本的末尾:

for i in ${!array[@]}; do
    array[i]="${array[i]%%.???}"
done

这里使用了两个技巧:

  1. 数组索引列表:${!array[@]} ( see info )
  2. 从末尾截断的模式:"${array[i]%%%.???}"(由于文件名中有空格,必须用双引号引起来)( see info )

为了确保(稍后当您使用数组时)您获得文件的完整名称,请在循环中使用以下技巧:

for file in "${array[@]}"; do  # the double-quotes are important
    echo "$file"
done

有关详细信息,请参阅 the bash hackers sitebash manual

关于arrays - 用 bash 替换数组中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7483491/

相关文章:

java - 从内部类引用

c++ - 在 C++ 中动态声明指向对象的指针数组

linux - 执行嵌套 bash 脚本时找不到命令

bash - 一个语句中有两个 Bash 替换?

linux - Bash:使用 'at' 编程当前脚本的下一次执行

php - 如何在 PHP 中调用随机函数

c++ - 为二维数组动态分配内存时出错

java - 如何调用 ArrayList 中数组的方法?

node.js - 我可以在运行时不键入 `less` 将我的 node.js 脚本输出通过管道传输到 `| less` 吗?

bash - 在 bash 中生成不重复的随机数序列