在双引号 shell 命令中转义 $
Escaping $ in double quoted shell command
我不知道如何在下面的 shell 语句中屏蔽 $。任何
感谢帮助!
#!/bin/bash
local result=`su -m user1 -c "sqlplus -s / as sysdba <<-EOF
SELECT cdb FROM v$database;
exit
EOF"
`
你应该单引号 EOF,例如<<-'EOF'
但是您还需要 运行 使用 $()
而不是反引号的子流程。
#!/bin/bash
local result=$(su -m user1 -c "sqlplus -s / as sysdba <<-'EOF'
SELECT cdb FROM v$database;
exit
EOF")
BashFAQ/082 报告“反引号内的反斜杠 (\) 以不明显的方式处理”
$ echo "`echo \a`" "$(echo \a)"
a \a
$ echo "`echo \\a`" "$(echo \\a)"
\a \a
# Note that this is true for *single quotes* too!
$ foo=`echo '\'`; bar=$(echo '\'); echo "foo is $foo, bar is $bar"
foo is \, bar is \
因此,如果您不想使用 $(...)
,则需要 2 个反斜杠,即 \$database
,如果您不想使用 $(...)
或单引号 EOF,则不需要少于 6 个反斜杠,即 \\\$database
不要使用反引号。使用 #(...)
.
local result=$(su -m user1 -c "sqlplus -s / as sysdba <<-EOF
SELECT cdb FROM v\$database;
exit
EOF
")
但是无论如何,如果您不想展开任何内容,请使用单引号。
local result=$(su -m user1 -c 'sqlplus -s / as sysdba <<-EOF
SELECT cdb FROM v$database;
exit
EOF
')
而且您可以在父 shell 中重定向 - 这会更简单 - 并使用带引号的停用词。
local result=$(su -m user1 -c 'sqlplus -s / as sysdba' <<-'EOF'
SELECT cdb FROM v$database;
exit
EOF
")
我不知道如何在下面的 shell 语句中屏蔽 $。任何 感谢帮助!
#!/bin/bash
local result=`su -m user1 -c "sqlplus -s / as sysdba <<-EOF
SELECT cdb FROM v$database;
exit
EOF"
`
你应该单引号 EOF,例如<<-'EOF'
但是您还需要 运行 使用 $()
而不是反引号的子流程。
#!/bin/bash
local result=$(su -m user1 -c "sqlplus -s / as sysdba <<-'EOF'
SELECT cdb FROM v$database;
exit
EOF")
BashFAQ/082 报告“反引号内的反斜杠 (\) 以不明显的方式处理”
$ echo "`echo \a`" "$(echo \a)"
a \a
$ echo "`echo \\a`" "$(echo \\a)"
\a \a
# Note that this is true for *single quotes* too!
$ foo=`echo '\'`; bar=$(echo '\'); echo "foo is $foo, bar is $bar"
foo is \, bar is \
因此,如果您不想使用 $(...)
,则需要 2 个反斜杠,即 \$database
,如果您不想使用 $(...)
或单引号 EOF,则不需要少于 6 个反斜杠,即 \\\$database
不要使用反引号。使用 #(...)
.
local result=$(su -m user1 -c "sqlplus -s / as sysdba <<-EOF
SELECT cdb FROM v\$database;
exit
EOF
")
但是无论如何,如果您不想展开任何内容,请使用单引号。
local result=$(su -m user1 -c 'sqlplus -s / as sysdba <<-EOF
SELECT cdb FROM v$database;
exit
EOF
')
而且您可以在父 shell 中重定向 - 这会更简单 - 并使用带引号的停用词。
local result=$(su -m user1 -c 'sqlplus -s / as sysdba' <<-'EOF'
SELECT cdb FROM v$database;
exit
EOF
")