我正在尝试制作一个Ruby heredoc的问题.它正在返回每行的前导空格,即使我包含 - 运算符,它应该抑制所有前导空白字符.我的方法看起来像这样:
def distinct_count
<<-EOF
\tSELECT
\t CAST('#{name}' AS VARCHAR(30)) as COLUMN_NAME
\t,COUNT(DISTINCT #{name}) AS DISTINCT_COUNT
\tFROM #{table.call}
EOF
end
Run Code Online (Sandbox Code Playgroud)
我的输出如下:
=> " \tSELECT\n \t CAST('SRC_ACCT_NUM' AS VARCHAR(30)) as
COLUMN_NAME\n \t,COUNT(DISTINCT SRC_ACCT_NUM) AS DISTINCT_COUNT\n
\tFROM UD461.MGMT_REPORT_HNB\n"
Run Code Online (Sandbox Code Playgroud)
当然,这在这个特定的例子中是正确的,除了第一个"和\ t之间的所有空格.有没有人知道我在这里做错了什么?
我想使用cat <<EOF >>以下代码将代码打印到文件中:
cat <<EOF >> brightup.sh
!/bin/bash
curr=`cat /sys/class/backlight/intel_backlight/actual_brightness`
if [ $curr -lt 4477 ]; then
curr=$((curr+406));
echo $curr > /sys/class/backlight/intel_backlight/brightness;
fi
EOF
Run Code Online (Sandbox Code Playgroud)
但是当我检查文件输出时,我得到了这个:
!/bin/bash
curr=1634
if [ -lt 4477 ]; then
curr=406;
echo > /sys/class/backlight/intel_backlight/brightness;
fi
Run Code Online (Sandbox Code Playgroud)
我尝试使用单引号,但输出也带有单引号.我该如何避免这个问题?
我需要我的脚本从终端发送电子邮件.基于我在这里看到的以及许多其他地方的在线,我将它格式化为:
/var/mail -s "$SUBJECT" "$EMAIL" << EOF
Here's a line of my message!
And here's another line!
Last line of the message here!
EOF
Run Code Online (Sandbox Code Playgroud)
但是,当我运行这个时,我得到这个警告:
myfile.sh: line x: warning: here-document at line y delimited by end-of-file (wanted 'EOF')
myfile.sh: line x+1: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)
...其中第x行是程序中最后写入的代码行,第y行是其中的行/var/mail.我试着更换EOF其他的事情(ENDOFMESSAGE,FINISH,等),但无济于事.我在网上找到的几乎所有内容都是这样做的,而且我真的很喜欢bash,所以我很难自己搞清楚.有人可以提供任何帮助吗?
我正在尝试使用来自ENV的替换字符串创建脚本文件,但也希望防止一些转义
export PLACEHOLDER1="myPlaceholder1Value"
export PLACEHOLDER2="myPlaceholder2Value"
sudo /bin/su -c "cat << EOF > /etc/init.d/my-script
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: my-script
# Required-Start: \$remote_fs \$syslog
# Required-Stop: \$remote_fs \$syslog
# Should-Start: \$network \$time
# Should-Stop: \$network \$time
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: blabla
# Description: bla bla desc
#
### END INIT INFO
#
myvariable_1=toto$PLACEHOLDER1
myvariable_2=titi$PLACEHOLDER2
myvariable_final=\"dynamicvar=\${myvariable_1},\${myvariable_2}\"
EOF
"
Run Code Online (Sandbox Code Playgroud)
由于myvariable_final没有被转义并被替换为init脚本依赖项中的一个($ remote_fs,$ syslog,$ network,$ time),因此结果不好.
#!/bin/bash
#
### BEGIN INIT …Run Code Online (Sandbox Code Playgroud) 拥有此处文档的最佳方式是什么,顶部和底部没有换行符?例如:
print '''
dog
cat
'''
Run Code Online (Sandbox Code Playgroud)
将在顶部和底部有换行符,为了摆脱它们,我必须这样做:
print '''dog
cat'''
Run Code Online (Sandbox Code Playgroud)
我发现它的可读性要低得多.
在C#中是否有字符串的heredoc表示法,最好是我不必转义任何内容(包括双引号,这是逐字字符串中的怪癖)?
作为一个新手,我被建议最好使用heredoc与太多嵌套代码相比(参见php代码中的意外T_ELSE).
但我无法理解heredoc和nowdoc之间是否存在显着差异.
与另一个对新手理解很重要的东西(即不是很小的优点但对我理解很重要)相比,heredoc和nowdoc有什么优势.
<?php
define('my_const', 100);
echo <<<MYECHO
<p>The value of my_const is {my_const}.</p>
MYECHO;
?>
Run Code Online (Sandbox Code Playgroud)
如果我在括号内放一个变量就会打印出来.但不是常数.我该怎么做?谢谢!
PHP的Heredoc示例似乎总是使用EOT(有时候是EOD)作为单独的字符串,而实际上可以在这里使用任何字符串.这有效:
$mystring = <<<EOT
Foo
Bar
Baz
EOT;
Run Code Online (Sandbox Code Playgroud)
虽然这也有效:
$mystring = <<<MONKIES
Foo
Bar
Baz
MONKIES;
Run Code Online (Sandbox Code Playgroud)
EOT是否真的代表什么?如果是的话,那是什么?