gpt4 book ai didi

bash - 为什么另一个字符串中的一个字符串在bash/ssh中拆分?

转载 作者:行者123 更新时间:2023-12-02 14:12:13 24 4
gpt4 key购买 nike

我学习了如何通过以下格式使用ssh,

ssh "${address}" "command run in a remote server"

所以我做了下面的代码,
# script name : test.sh
address='127.0.0.1'
file="test.txt"
pattern='Number of records'
ssh "${address}" "grep "${pattern}" "${file}""

'bash -x test.sh'的输出如下,
 ssh 127.0.0.1 'grep Number' of 'records test.txt'
grep: of: No such file or directory
grep: records: No such file or directory
grep: test.txt: No such file or directory

似乎“grep“$ {pattern}”“$ {file}”“被解释为以下3个字符串
 (grep Number)  + (of) + (records test.txt)

为什么要像这样拆分字符串?解决方案是什么?请告诉我。非常感谢你。

最佳答案

Bash将替换变量,并将其视为未引用。其次,您不能在引号内使用引号而不进行转义。注意此命令

"grep "${pattern}" "${file}""

将被转换为(第二个引号将被视为字符串的结尾):
"grep "Number of records" "test.txt""

然后未用空格定界的字符串将被连接为一个(引号内的空格不是定界符)。因此我们得到了
(grep Number) (of) (records test.txt)

要解决此问题,请转义内部引号或仅使用另一种引号
ssh "${address}" "grep \"${pattern}\" ${file}"

要么
ssh "${address}" "grep '${pattern}' ${file}"

我认为 ${file}不应该被引用,因为如果它包含多个文件,则应将其视为单独的参数。

关于bash - 为什么另一个字符串中的一个字符串在bash/ssh中拆分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40878894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com