带有 2 个变量的下划线

带有 2 个变量的下划线

我正在尝试在我的脚本中添加一个变量,如下所示:

ssh root@$dev 'cat /etc/hosts > /var/tmp/hosts_$dev_$(date +%F)'

但是,这不起作用,我尝试过

/var/tmp/hosts\_$dev\_$(date +%F)'
/var/tmp/hosts_${dev}_$(date +%F)'

有人可以帮助我,无论我做什么,输出仍然是。

hosts_2017-06-20

供将来使用的分辨率:

我使用单引号而不是双引号,如下所示:

ssh root@$dev "cat /etc/hosts > /var/tmp/hosts\_$dev\_$(date +%F)"

答案1

让我引用这个精彩的问题与它选择的答案,以避免再次解释已经在 stackexchange 的其他站点上回答的问题。这是以下部分bash(1)与变量引用相关的联机帮助页:

3.1.2.2 单引号

将字符括在单引号 ( ') 中可保留引号内每个字符的字面值。单引号之间不能出现单引号,即使前面有反斜杠也是如此。

3.1.2.3 双引号

将字符括在双引号 ( ) 中会保留引号内所有字符的字面值,但、、和(启用历史扩展时)"除外。这些字符并在双引号内保留其特殊含义(请参阅$`\!$`外壳扩展)。仅当反斜杠后跟以下字符之一时,反斜杠才保留其特殊含义:$`"\或换行符。在双引号内,后跟这些字符之一的反斜杠将被删除。前面没有特殊含义的反斜杠字符保持不变。双引号可以在双引号内引用,方法是在双引号前面加上反斜杠。如果启用,将执行历史扩展,除非!使用反斜杠转义出现在双引号中的内容。前面的反斜杠!不会被删除。

特殊参数*@在双引号中时具有特殊含义(请参阅外壳参数扩展)。

回答:这就是为什么在你的目标文件上你有$dev而不是该变量的内容。

相关内容