如何在单引号字符串中使用变量?

时间:2014-01-17 17:44:04

标签: string bash shell echo

我只是想知道如何在单引号内回显一个变量(我使用单引号,因为字符串中有引号)。

     echo 'test text "here_is_some_test_text_$counter" "output"' >> ${FILE}

任何帮助将不胜感激

7 个答案:

答案 0 :(得分:33)

变量以双引号字符串扩展,但不在单引号字符串中扩展:

 $ name=World

 $ echo "Hello $name"
 Hello World

 $ echo 'Hello $name'
 Hello $name

如果您只需切换引号,请执行此操作。

如果你更喜欢使用单引号来避免额外的转义,你可以在同一个参数中混合和匹配引号:

 $ echo 'single quoted. '"Double quoted. "'Single quoted again.'
 single quoted. Double quoted. Single quoted again.

 $ echo '"$name" has the value '"$name"
 "$name" has the value World

适用于您的案件:

 echo 'test text "here_is_some_test_text_'"$counter"'" "output"' >> "$FILE"

答案 1 :(得分:7)

使用printf:

printf 'test text "here_is_some_test_text_%s" "output"\n' "$counter" >> ${FILE}

答案 2 :(得分:4)

使用heredoc:

cat << EOF >> ${FILE}
test text "here_is_some_test_text_$counter" "output"
EOF

答案 3 :(得分:2)

最具可读性的功能方法是在双引号内使用花括号。

'test text "here_is_some_test_text_'"${counter}"'" "output"' >> "${FILE}"

答案 4 :(得分:0)

你可以这样做:

app.set("view engine", "ejs");

<强>解释: Eval命令将字符串作为命令处理,因此在正确的转义量之后它将产生所需的结果。

它表示执行以下字符串作为命令:

app.js

再次命令一行:

TypeError: Router.use() requires middleware function but got a string
    at Function.use (/private/tmp/node_modules/express/lib/router/index.js:458:13)
    at EventEmitter.<anonymous> (/private/tmp/node_modules/express/lib/application.js:220:21)
    at Array.forEach (native)
    at EventEmitter.use (/private/tmp/node_modules/express/lib/application.js:217:7)
    at Object.<anonymous> (/private/tmp/t/app.js:5:5)     <--- there!
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)

答案 5 :(得分:0)

输出用单引号包装的变量:

printf "'"'Hello %s'"'" world

答案 6 :(得分:-1)

使用子shell:

var='hello' echo 'blah_'`echo $var`' blah blah';