我正在编写一个 bash 脚本,需要在此位置创建一个文件:
/etc/yum.repos.d/nginx.repo
包含以下内容:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
Run Code Online (Sandbox Code Playgroud)
所以,我尝试这样做:
cat >/etc/yum.repos.d/nginx.repo <<EOL
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=0
enabled=1
EOL
Run Code Online (Sandbox Code Playgroud)
当我检查文件的内容时,我看到以下内容:
正如您所看到的,美元符号没有被转义,因此变量被评估为 null/空字符串,并且内容看起来不正确。因为,当我尝试安装 nginx 时,出现以下错误:
http://nginx.org/packages/centos///repodata/repomd.xml:[Errno 14] HTTP 错误 404 - 未找到
有任何想法吗?
我想通过使用heredoc中的增量运算符来增加变量的值。我当前的代码如下...
$counter = 0;
for($i = 0; $i<10; $i++):
echo <<< EOT
$counter++ <br/>
EOT;
endfor;
Run Code Online (Sandbox Code Playgroud)
它的输出是...
0++
0++
.
.
Run Code Online (Sandbox Code Playgroud)
平均后增量运算符不起作用。
我也尝试过预增量,如下所示......
echo <<< EOT
++$counter <br/>
EOT;
Run Code Online (Sandbox Code Playgroud)
它的输出是...
++0
++0
.
.
Run Code Online (Sandbox Code Playgroud)
意味着预增量运算符也不起作用。
我还尝试将增量操作放在大括号内,如下所示......
echo <<< EOT
{++$counter} <br/>
EOT;
Run Code Online (Sandbox Code Playgroud)
但还是没有运气。输出是....
{++0}
{++0}
.
.
Run Code Online (Sandbox Code Playgroud)
我也在谷歌上搜索过,但没有找到任何有用的东西。
我知道如果我可以在heredoc之前增加值,那么我可以在这里正确打印它
$counter = 0;
for($i = 0; $i<10; $i++):
++$counter;
echo <<< EOT
$counter <br/>
EOT;
endfor;
Run Code Online (Sandbox Code Playgroud)
效果很好。
但我想在heredoc中使用增量运算符,就像我们在单引号或双引号的情况下使用 一样echo。
但heredoc似乎不支持增量操作。
我尝试实现Docker本身提供的示例(https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/)
# syntax=docker/dockerfile:1.3-labs
FROM ubuntu:20.04
RUN <<EOF
echo "Hello" >> /hello
echo "World!" >> /hello
EOF
Run Code Online (Sandbox Code Playgroud)
使用docker版本
~/test$ docker --version
Docker version 20.10.22, build 3a2c30b
Run Code Online (Sandbox Code Playgroud)
但它会抛出错误
~/test$ docker build .
Sending build context to Docker daemon 2.048kB
Error response from daemon: dockerfile parse error line 6: unknown instruction: ECHO
Run Code Online (Sandbox Code Playgroud)
我还尝试过 dockerfile 版本 1、1.3、1.4、2、2.0。什么都没起作用。我做错了什么或者它只是不起作用(还)?
val name = "mike"
val str = """Hi, {name}!"""
println(str)
Run Code Online (Sandbox Code Playgroud)
我希望它输出str as Hi, mike!,但失败了.这该怎么做?
你可以做一个循环和here-doc,像这样:
array.each do |ele|
a=<<-TEXT
ele
some stuff
TEXT
end
Run Code Online (Sandbox Code Playgroud)
谢谢
您可以在条件文档中放入条件语句吗?
IE浏览器:
sky = 1
str = <<EOF
The sky is #{if sky == 1 then blue else green end}
EOF
Run Code Online (Sandbox Code Playgroud)
谢谢
写一个简单的bash脚本在早上为我做一些检查:一部分是拉下一些html文件并确保它们存在.另一部分是确保存在一些本地文件,如果不存在则通过电子邮件发送.我面临的问题是我收到了"语法错误:意外的文件结束",我无法理解为什么会发生这种错误.这是代码的简化版本:
for myHost in $HOSTS
do
result=$(wget -T $TIMEOUT -t 1 $myHost -O /dev/null -o /dev/stdout)
result2=$(echo $result | grep "awaiting response")
connected=$(echo $result | grep "404");
if [ "$connected" != "" ]; then
for myEMAIL in $EMAIL
do
echo -e "$(date) - $myHost is down! \n This is an automated message." | mailx -r "box.email.com" -s "$SUBJECT" $myEMAIL
done
fi
done
numoffiles=`find . -maxdepth 1 -mtime -1 | grep -i .html | wc -l`
if [ "$numoffiles" -ne 5 …Run Code Online (Sandbox Code Playgroud) 我有一个相当复杂的SQL查询,我想在PowerShell脚本中的here-string中使用.在查询中,我想用PowerShell变量替换某些值.我试图准确理解我需要声明和初始化将在here-string中使用的变量.
简化示例:
$SqlQuery = @"
update MyTable
set foo = $bar
where baz = $quux
"@
...
foreach ($part in $parts) {
$bar = $part[0]
$quux = $part[1]
Run-SqlNonQuery $SqlQuery #Run-SqlNonQuery is a funct. that executes the query
}
Run Code Online (Sandbox Code Playgroud)
我在顶部声明了here-string,它引用了一些PowerShell变量,$ bar和$ quux,每次循环都会改变.
但是,当我运行脚本时,我遇到了错误.当我运行SQL跟踪时,PS脚本中没有出现PowerShell变量的值.
在像这样的here-string中调用时,PowerShell变量是否被插值?我是否需要将整个here-string 放在变量初始化的循环中?对于这样的事情,正确的结构是什么?
我在Windows 7,.Net 4,VS2010上运行PowerShell.我不清楚这个版本; $Host回报
Name : PowerConsole
Version : 1.0.30222.0
Run Code Online (Sandbox Code Playgroud)
但是$PSVersionTable回归
PSVersion 2.0
PSCompatibleVersions {1.0, 2.0}
BuildVersion 6.1.7601.17514
Run Code Online (Sandbox Code Playgroud) 我需要一个here文件上传TeX到在线shell.我不希望shell对内容做任何事情.以下MWE是我迄今为止管理得最好的.
cat << EOF > /tmp/mytex
\documentclass{article}
\begin{document}
Test mathematics: $ 2^{10} = 1024$ works but
$e^{i\pi} = -1$ is mangled because no space follows the $e$.
"double" and 'single' quotes should be preserved too.
\end{document}
EOF
Run Code Online (Sandbox Code Playgroud) 如果我之前已经定义了这样的颜色变量:
txtred='\e[1;31m'
Run Code Online (Sandbox Code Playgroud)
我如何在heredoc中使用它:
cat << EOM
[colorcode here] USAGE:
EOM
Run Code Online (Sandbox Code Playgroud)
我的意思是我应该写什么代替[colorcode here]将USAGE文本呈现为红色?${txtred}不会起作用,因为这是我在整个bash脚本中使用的,在heredoc之外
heredoc ×10
bash ×4
ruby ×2
colors ×1
docker ×1
dockerfile ×1
linux ×1
loops ×1
nginx ×1
php ×1
powershell ×1
rawstring ×1
scala ×1
string ×1
syntax-error ×1