使用带有嵌入在 rcp 命令中的变量的反引号表达式
Using backtick expression with variable embedded in an rcp command
我需要在 rcp
调用中嵌入的反引号表达式中使用变量。
我的初步尝试:
#!/bin/sh
release=1
rcp myserver.foo.com:'`ls -t /path/to/my/${release} | head -n 1`' .
我想这是失败的,因为反引号表达式正在 myserver.foo.com
上执行,它没有 release
变量,所以我的 ls
命令的参数是只是 /path/to/my/
.
我 read 通常 eval
命令可用于(我认为)预处理反引号表达式。当我尝试这种方法时:
#!/bin/sh
release=1
rcp myserver.foo.com:'`ls -t /path/to/my/eval ${release} | head -n 1`' .
...反引号表达式仅作为 /path/to/my/eval
.
执行
如何在此上下文中的反引号表达式中使用变量?
需要说明的是:我试图在远程服务器上而不是在本地使用反引号 运行 中的代码(但我需要先在本地解析 ${release}
)
到 运行 远程上的 ls,但是将 $release 扩展到它在本地机器上的值,你需要使用不同的引号。要使变量 $release 在本地扩展,它需要用双引号引起来,而不是单引号。您可以通过以下方式完成:
#!/bin/sh
release=1
scp myserver.foo.com:'$(ls -t /path/to/my/'"${release}"' | sed 1q)' .
如果文件名中有不寻常的字符(例如空格),您可能需要添加更多引号:
scp myserver.foo.com:'"$(ls -t /path/to/my/'"${release}"' | sed 1q)"' .
请注意,您可能想要添加完整路径:
scp myserver.foo.com:/path/to/my/"$release"/'"$(ls -t /path/to/my/'"${release}"' | sed 1q)"' .
我需要在 rcp
调用中嵌入的反引号表达式中使用变量。
我的初步尝试:
#!/bin/sh
release=1
rcp myserver.foo.com:'`ls -t /path/to/my/${release} | head -n 1`' .
我想这是失败的,因为反引号表达式正在 myserver.foo.com
上执行,它没有 release
变量,所以我的 ls
命令的参数是只是 /path/to/my/
.
我 read 通常 eval
命令可用于(我认为)预处理反引号表达式。当我尝试这种方法时:
#!/bin/sh
release=1
rcp myserver.foo.com:'`ls -t /path/to/my/eval ${release} | head -n 1`' .
...反引号表达式仅作为 /path/to/my/eval
.
如何在此上下文中的反引号表达式中使用变量?
需要说明的是:我试图在远程服务器上而不是在本地使用反引号 运行 中的代码(但我需要先在本地解析 ${release}
)
到 运行 远程上的 ls,但是将 $release 扩展到它在本地机器上的值,你需要使用不同的引号。要使变量 $release 在本地扩展,它需要用双引号引起来,而不是单引号。您可以通过以下方式完成:
#!/bin/sh
release=1
scp myserver.foo.com:'$(ls -t /path/to/my/'"${release}"' | sed 1q)' .
如果文件名中有不寻常的字符(例如空格),您可能需要添加更多引号:
scp myserver.foo.com:'"$(ls -t /path/to/my/'"${release}"' | sed 1q)"' .
请注意,您可能想要添加完整路径:
scp myserver.foo.com:/path/to/my/"$release"/'"$(ls -t /path/to/my/'"${release}"' | sed 1q)"' .