【问题标题】:bad substitution ${line ::-1}错误替换 ${line ::-1}
【发布时间】:2021-04-07 15:53:48
【问题描述】:

我有这段代码,虽然它运行良好,但我在virusarray[i]=${line ::-1} 行有一个错误 testFile.sh:第 57 行:${line ::-1}:错误替换 这种错误。谁知道?

    declare -a virusarray
i=0

while read line; do  
  
#Reading each line by omitting backslash escape  
virusarray[i]=${line ::-1}
# echo $line
((i=i+1))
done < $virusfile

【问题讨论】:

  • 为什么是c 标签?
  • 试试${line::-1},我不认为 bash 喜欢那个空间
  • 具体来说,在您的 PE 内的数字和运算符之间存在歧义的字段中使用 数字之前 的空格是正确的(并且两者都是有效的);但这不是其中一种情况,而且空间完全是错误的。
  • 顺便说一句,这是将行分配给数组的一种非常低效的方法。考虑mapfile -t virusarray &lt;"$virusfile"; virusarray=( "${virusarray[@]%?}" )?即使virusarray+=( "${line%?}" ) 会更好。

标签: bash substitution script


【解决方案1】:

是的,它确实是无效的语法。取出空间:

virusarray[i]=${line::-1}

...甚至更好,完全重写你的循环。假设您使用的 bash 版本太旧,无法支持 mapfilereadarray

while IFS= read -r line; do
  virusarray+=( "${line%?}" )
done <virusfile

${line%?}${line::-1} 的用途相同(删除最后一个字符),但这样做更便携,因为它不需要对 shell 语法进行仅 bash 的扩展。

【讨论】:

    猜你喜欢
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 2021-02-26
    • 2020-12-04
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多