如何防止在 Linux bash 脚本中执行蜱虫命令

如何防止在 Linux bash 脚本中执行蜱虫命令

我想将变量中的$COMMAND第二个制表符分隔字段保存在变量中$i,但是当我这样做时,命令cd ~会被执行。TEST_CASE_001和之间有一个制表符cd ~

i='TEST_CASE_001 cd ~'
COMMAND=$(echo $i | cut -f2)

如何防止它被执行并保存在$COMMAND

答案1

注意:此答案适用于问题的第一个版本。

首先,让我们i用选项卡来定义:

$ i=$'ls -l\tcd ~'

现在,让我们尝试一下不带双引号和然后带双引号的命令:

$ echo $i | cut -f2
ls -l cd ~
$ echo "$i" | cut -f2
cd ~

如果你想cut按预期工作,你需要加上$i双引号。如果没有双引号,shell 会执行以下操作:分词这会导致选项卡被空白替换。这会阻止该cut命令按您的预期工作。

对 Command 进行分配不会改变这一点:

$ Command=$(echo $i | cut -f2); declare -p Command
declare -- Command="ls -l cd ~"
$ Command=$(echo "$i" | cut -f2); declare -p Command
declare -- Command="cd ~"

普通的留言

您没有在此处提供更大的上下文,但一般来说,尝试将命令放入变量中是一个坏主意。看“我试图将命令放入变量中,但复杂的情况总是失败!”

另外,对于变量COMMAND,最好对 shell 变量使用小写或混合大小写。系统使用大写字母表示其变量,您不想意外覆盖其中之一。

相关内容