【发布时间】:2017-09-12 22:28:23
【问题描述】:
所以我试图找出这种奇怪的行为。
$ hello hello
-ksh: hello: not found [No such file or directory]
$ "hello hello"
-ksh: hello hello: not found [No such file or directory]
$ echo hello hello
hello hello
$ `echo hello hello`
-ksh: hello: not found [No such file or directory]
$ echo \"hello hello\"
"hello hello"
$ `echo \"hello hello\"`
-ksh: "hello: not found [No such file or directory]
第二条和第六条命令与我的问题最相关。如果我运行第二个命令"hello hello",那么它将评估为一个重要参数。但是,如果我尝试运行最后一个命令
`echo \"hello hello\"`
那么它应该具有相同的行为吗?但它将"hello 视为自己的独立词。有人可以解释一下,以及如何让第 6 个命令像第 2 个命令一样工作,以便将“hello hello”作为一个完整的语句进行评估?
(这有一个更实际的应用,但这是我能做的最小的例子)。
提前谢谢你!
编辑:我看到我投了反对票,所以我会更具体地说明我遇到了什么问题。
rcli4 6379 keys AAA* | sed -e "s/.*/'&'/" | while read line; do rcli4 6379 get $line; done
请注意,rcli4 只是redis-cli -p 的别名。我一直收到一个
(error) ERR wrong number of arguments for 'get' command
这是由于引号被错误地解析。我尝试了不同的组合,例如添加更多引号、删除该 sed 语句等,但无济于事,但我认为能够解决我原来的 hello hello 问题将使我对如何解决我的具体问题有足够的了解。
【问题讨论】:
-
在带引号的字符串中,引号只是另一个字符。它没有特殊的力量。
-
@John1024 是的,我就是这么想的,但我想知道是否有办法让它适用于第 6 个示例。
-
@SiddSingal 这可能会有所帮助:I'm trying to put a command in a variable, but the complex cases always fail!。该链接是为 bash 编写的,但我希望相同的原则也适用于 ksh。
-
@SiddSingal 如果我正确理解了编辑中所述的问题,则解决方案是引用
$lineinside do-loop,而不是在它之前。因此,请尝试:rcli4 6379 keys AAA* | while read -r line; do rcli4 6379 get "$line"; done -
@John1024 嗯哇好吧....那行得通....如果您愿意,可以将其发布为答案,我会接受。感谢您的帮助!
标签: linux command-line ksh quotes