Bash: 单引号中的变量

5

首先看一下这个问题: Bash或GoogleCL:字符串参数中的新行

现在我想把变量 ${date} 添加到“摘要”中:

google youtube post ~/videos/cat-falls-down-stairs.avi Comedy \
    --tags 'currency of the internet' \
    --summary $'Today is ${date}. Poor whiskers takes a tumble.\nShe'\''s fine, though, don'\''t worry.'

但是在bash中,单引号内的变量不会扩展。

有没有可能做到这一点?

注意:GoogleCL是一个用Python编写的命令行程序。我使用的是Ubuntu 10.10和Python 2.6。

3个回答

15

与其试图在单引号字符串中扩展变量,通常的解决方案是连接单引号和双引号字符串。换句话说:

'Today is'"${date}"' Poor' ...

相比于尝试在单引号字符串中扩展变量,这里的解决方案是将一个单引号字符串和一个双引号字符串连接起来。


4
我会为列表添加另一种选项:定义一个变量作为换行符,然后在双引号内使用它。
nl=$'\n'
...
   --summary "Today is ${date}. Poor whiskers takes a tumble.${nl}She's fine, though, don't worry."

1

在单引号内,变量不会被展开。你可以像William建议的那样去做,或者你可以将这行代码改为双引号,这样变量就会按照你想要的方式展开。

"Today is ${date}. Poor whiskers takes a tumble.\nShe's fine, though, don't worry."

额外福利:这种方式不需要转义单引号。

现在我读了这个链接,你说 \n 不会扩展。解决这个问题的方法可以是这样的:

--summary $(echo -e "Today is...")

使用子shell有点粗糙,但可以避免反斜杠转义引号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接