【发布时间】:2020-01-02 19:00:35
【问题描述】:
我需要快速澄清一下:
这个是否相等
CASSANDRA_IP=00.000.00.00
CASSANDRA_USER=用户
CASSANDRA_PASSWORD=密码
#!/bin/bash
cqlsh "${CASSANDRA_IP}" -u "${CASSANDRA_USER}" -p "${CASSANDRA_PASSWORD}" -f command.cql
这个?
cqlsh 00.000.00.00 -u user -p 'password'
或者我必须在命令中分隔动态变量吗?
#!/bin/bash
cqlsh "${CASSANDRA_IP}" -u \'"${CASSANDRA_USER}"\' -p \'"${CASSANDRA_PASSWORD}"\' command.cql
【问题讨论】:
-
第三个不正确,因为它在您传递的值中添加了文字单引号。第一个完全按照预期使用引用。第二个是等效的,因为
password周围的单引号被视为 shell 语法的一部分。 (password和'password'产生相同的参数,因此使用引号是合法的,但没有必要。) -
前两个是一样的。一般规则是,如果要进行分词,则不应引用变量。如果您不希望发生分词,则应引用该变量。如果您不确定是否要进行分词,那么您几乎可以肯定不这样做,您应该引用该变量。
-
为了突出 chep 所说的内容,请记住,当您以这种方式转义单引号时,您是在使它们 成为参数的一部分,而不是 参数的容器。每个人都告诉你引用你的变量的原因是为了保持参数的包含。转义任何东西都会删除(或至少改变)其原始功能。
cqlshrequire 一些任意字符(如 0x27)被添加到输入数据中,这将是非常令人惊讶的。有关引号转义的示例,请参阅 this。
标签: bash shell command-line terminal