特殊字符和解析BUG - Bashscript

特殊字符和解析BUG - Bashscript
Failed to parse arguments: Argument to "--command/-e" is not a valid command: Text ended before matching quote was found for ". (The text was '"cpulimit')

这是我在终端中运行以下脚本时得到的结果

    #!/bin/bash
read -p "Which program u want to limit its processes?" ProgrameName
read -p "Which limitation percentage u want for it ?" limitationPercentage  

getAllPIDRunUnderThisProgram=$( ps -e | grep "$ProgrameName" | awk '{print $1;}')
for i in $getAllPIDRunUnderThisProgram
   do
    gnomeTab+="  --tab -e \"cpulimit -p $i -l $limitationPercentage \" "  
   done

gnome-terminal $gnomeTab

他无法解析转义字符“\”,因为第 8 行中有双引号,所以必须使用它,gnomeTab+=" --tab -e \"cpulimit -p $i -l $limitationPercentage \" "那么有没有解决方案可以使用双引号,因为它们必须在之后使用--tab -e " some commands ",而不会出现解析问题?

答案1

您可以将第一行更改为

#!/bin/bash -xv

让 shell 向您展示它如何解释参数。

您不应该使用转义(这会导致eval),而应该使用数组来累积选项:

for i in $getAllPIDRunUnderThisProgram ; do
    gnomeTab+=(--tab -e "cpulimit -p $i -l $limitationPercentage")  
done

echo "${gnomeTab[@]}"

相关内容