通常,为了在字符串中嵌入引号,\使用(反斜杠)。
反斜杠在 Bash 脚本中是否有不同的含义?
我的下面的代码不起作用:未包含引号,并报告了以下错误:
recursive_merge.sh: line 7: unexpected EOF while looking for matching `''
recursive_merge.sh: line 14: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)
我没有解释。14号线根本不存在。
#!/bin/bash
#############this file should be in the directory directly upper than p0x. sphnum.txt should also be at the same directory
for i in 02 03 04 05 06 07 09 10 11 12 13 14 15 16 17 20 21 22 23 24 25; do
x=$(grep $i sphnum.txt |cut -c5-6)
y=$(grep $i sphnum.txt …Run Code Online (Sandbox Code Playgroud) 我有这样的文件目标
foo:
i = 1
@echo $(i)
Run Code Online (Sandbox Code Playgroud)
当我像这样运行 make 文件时:
$ make foo
Run Code Online (Sandbox Code Playgroud)
i = 1
make: i: 命令未找到
Makefile:2: 目标 'foo' 的配方失败
make: [foo] 错误 127
但是如果我不给分配空间(即)
i=1
Run Code Online (Sandbox Code Playgroud)
然后没有错误但没有输出,不打印 i 的值
所以我知道有很多关于堆栈溢出的答案可以忽略 bash 脚本中的错误。不过,它们似乎都不适用于 source 命令。
我已经尝试过久经考验的 source ../bin/activate || true
我set -e在运行命令之前尝试过设置
我试过了 source ../bin/activate 2>&1 /dev/null
我set +e在运行命令之前尝试过设置。这也不起作用。
但是在这段代码的每次运行中,我都会收到
run.01: line 12: ../bin/activate: 没有那个文件或目录
这个问题的上下文是我正在创建一个运行一些 python 代码的简单 bash 脚本。指示用户如何创建特定的虚拟环境,如果他们正确设置,此行将自动激活它,否则,这应该忽略无法激活运行并在当前激活的任何环境中继续运行命令。
# Try virtual environment
source ../bin/activate || true
## Run.
code="../src-01/driver.v01.py"
## --------------------
graphInputFile="undirected_graph_01.inp"
graphType="undirected"
srcColId="0"
desColId="1"
degreeFind="2"
outFile="count.undirected.num.nodes.out"
python $code -inpGraphFile $graphInputFile -graphFormat $graphType -colSrcId $srcColId -colDesId $desColId -degreeFind $degreeFind -output_file $outFile
Run Code Online (Sandbox Code Playgroud)
无论命令是否source ../bin/activate成功,python 命令都应该执行。我有点不明白为什么这些解决方案都不起作用,目前我假设在这种情况下source可能会做一些与正常命令不同的事情。
编辑:
我#!/bin/bash -x按照要求将shebang添加到我的文件中,但这没有做任何事情。
这是我运行此脚本时的确切终端输出。 …
通常,当您使用 cURL 时,输出如下所示:
alex$ curl http://some-url
some-content
Run Code Online (Sandbox Code Playgroud)
但是,对于某些 url,输出是不同的:
alex$ curl http://some-url
[1] 81030
alex$ some-content
[1]+ Done curl http://some-url
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况以及如何摆脱它并使 cURL 仅输出内容?
我理解使用单引号和双引号.
但我不知道情况需要在脚本中加双引号.
这些陈述没有差异
$ echo hello world! $1
$ echo "hello world! $1"
Run Code Online (Sandbox Code Playgroud)
请告诉我正常和双引号之间的差异.
我有一个 bash 脚本,我想检查一个字符串是否在列表中。比如:string = "Hello World!", List=("foo", "bar")。蟒蛇示例:
if name in list: # Another way -> if name in ["foo", "bar"]
# work to do
else:
sys.exit(1)
Run Code Online (Sandbox Code Playgroud)
谢谢!
我需要从头文件中提取一些信息,并且需要从如下字符串中获取站点名称:
0008 0080 LO Institution Name Site Name Here
Run Code Online (Sandbox Code Playgroud)
问题是网站名称也包含空格。我想到的唯一可行的方法是将行保存为字符串,然后在一定数量的字符后将站点名称作为字符串获取,如下所示:
回声 ${行:50}
但我想要更优雅的东西。
我刚刚注意到它还删除了Institution Name和之间的多个空格Site Name。
我从.txt文件中获取行:Say Input.txt
a
*
b
Run Code Online (Sandbox Code Playgroud)
然后我正在阅读它:
#!/bin/bash
file=$1
ans=0
while read -r line || [[ -n "$line" ]]
do
echo $line
done < $file # passing the file
Run Code Online (Sandbox Code Playgroud)
为此我得到以下输出
a
test main.py sic.sh
b
Run Code Online (Sandbox Code Playgroud)
显示我的目录的文件而不是*
我想根据*char来做一些决定,我需要检测/读取*?
如何仅对文件的“尾部”执行grep?
我正在尝试运行以下命令:
grep 'TEST COMPLETE' -L *.log
Run Code Online (Sandbox Code Playgroud)
TEST COMPLETE出现在最后几行中,此命令列出了文件夹中尚未完成测试的所有文件(由于-L)。日志很大,但是grep非常慢。
另一方面,我可以在尾部使用grep。grep几乎是即时的:
tail *.log | grep 'TEST COMPLETE'
Run Code Online (Sandbox Code Playgroud)
但是我不能使用-lor -L参数,因为我现在正在抓取管道输入而不是文件。因此,使用list files参数运行它:
tail *.log | grep 'TEST COMPLETE' -L
Run Code Online (Sandbox Code Playgroud)
只会输出: (standard input)
有什么办法可以让我grep搜索最后10行或类似内容吗?
下面是我的变量声明,在 shell 脚本中,我正在寻找一种方法来循环字符串列表以获取每个项目。
output='['a.txt', 'b.txt', 'c.txt', 'd.txt']'
Run Code Online (Sandbox Code Playgroud)
我尝试了下面的脚本,但它没有按预期工作
for i in "${output}"; do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
预期结果:
a.txt
b.txt
c.txt
d.txt
Run Code Online (Sandbox Code Playgroud)