我想将变量中的$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 变量使用小写或混合大小写。系统使用大写字母表示其变量,您不想意外覆盖其中之一。