我写了以下脚本:
对于 `find 中的文件名。-name '*'.cpp | grep $IN_REGEX | grep -v $OUT_REGEX`
做
echo "输出文件是 $OUTPUT_FILE"
count=`git log --pretty=format: --name-only $filename | grep -v ^$ | wc -l`
echo "$count $filename" >> $OUTPUT_FILE
完毕
但是没有任何内容写入输出文件。
请注意:
OUTPUT_FILE,IN_REGEX和的值OUT_REGEX。sh -x调用检查了这一点。>> $OUTPUT_FILE我得到输出。touch $OUTPUT_FILE在脚本内部尝试了一个,并且工作正常。有人可以指出我在这里的错误吗?
我正在玩type和which命令,我发现了一些奇怪的东西。
type或者返回的路径或者说,一个命令是一个bash内置的。
which要么返回内置插件,如路径或没有exit或type
奇怪的是,type echo说 echo 是我预期的内置。
但是which echo将 /bin/echo 作为 echo 可执行文件的路径。对于任何其他内置命令,这似乎不会发生。
我想知道两者之间的区别是什么,Bash 选择在脚本和命令行中执行哪一个,以及这两个回声背后的故事是什么。
我的系统是 Ubuntu Desktop 12.04
所以在 bash 中,当我这样做时
echo \*
*
Run Code Online (Sandbox Code Playgroud)
这似乎是正确的,因为 * 被转义并按字面意思理解。
但我无法理解,当我这样做时
echo \\*
\*
Run Code Online (Sandbox Code Playgroud)
我认为第一个反斜杠逃脱了第二个反斜杠,因此两个反斜杠“\\”会在字面上给我一个“\”。和 * 后面带有它的特殊含义。我期待:
echo \\*
\file1 file2 file3
Run Code Online (Sandbox Code Playgroud)
答案摘要:由于 \ 是按字面意思echo \*理解的echo a*,因此将表现得与 一样,它将查找以字面量“a”开头的任何文件。
跟进问题,如果我想打印出来完全一样
\file1 file2 file3
Run Code Online (Sandbox Code Playgroud)
我应该使用什么命令?例如,如下所示,但我不想要空间
echo \\ *
\ file1 file2 file3
Run Code Online (Sandbox Code Playgroud) 我有一个由显示驱动程序控制的小型 LED 矩阵,该驱动程序接受串行命令来更新显示。我通过带有节点串行包的节点成功控制了它,但是我希望能够使用 echo 更新它,以便我可以在启动过程中使用 shell 脚本更早地控制它。
为了开始测试这个新方法,我设置了它:
chmod o+rw /dev/ttyUSB0
stty /dev/ttyUSB0 115200
Run Code Online (Sandbox Code Playgroud)
我可以使用屏幕向它发送命令:
screen -F /dev/ttyUSB0 115200
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用时:
echo -e 'title \r' > /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)
它不起作用,当我在另一个窗口中监视响应时
cat -v < /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)
我看到它正在接收消息,但它似乎是零散的,并且还不断响应错误,就好像我正在发送大量错误和/或空白命令一样。
如何使用 echo 模拟从屏幕发送的命令?
我写了一个非常基本的命令替换脚本,如下所示:
#!/bin/bash
files=$(ls *.fastq);
echo $files
Run Code Online (Sandbox Code Playgroud)
该目录包含一堆 .fastq 文件,我只想使用 echo 命令来输出它们
上面的 sript 输出 fastq 文件,每个 fastq 文件名之间有一个空格。
当我以这种方式使用它时
#!/bin/bash
files=$(ls *.fastq);
echo "$files"
Run Code Online (Sandbox Code Playgroud)
它在新行上打印结果。
为什么会这样?这与命令替换有关吗?
谢谢
我有一个小的开源项目,出于各种原因,我试图用相当可移植的 shell 脚本编写。它的自动化集成测试检查路径表达式中的敌对字符是否得到正确处理,等等。
/bin/sh提供的用户bash在测试中看到失败,我已将其简化为以下内容:
echo "A bug\\'s life"
echo "A bug\\\\'s life"
Run Code Online (Sandbox Code Playgroud)
在 bash 上,它会产生以下预期结果:
A bug\'s life
A bug\\'s life
Run Code Online (Sandbox Code Playgroud)
使用我开发的破折号,它可以执行以下操作:
A bug\'s life
A bug\'s life
Run Code Online (Sandbox Code Playgroud)
我想我没有在 dash 中发现错误,我可能会遗漏一些东西。对此有合理的解释吗?
在echo中coreutils似乎是无处不在的,但不是每个系统都会有它在同一个地方(一般/bin/echo)。在echo不知道它在哪里的情况下调用它的最安全方法是什么?
如果echo系统上不存在coreutils二进制文件,我对命令失败感到满意——这比回显与我想要的不同。
注意:这里的动机是找到echo二进制文件,而不是找到一组参数,其中每个 shell 的echo 内置函数都是一致的。例如,似乎没有一种方法可以通过内置的 echo 安全地打印连字符,而不知道您是否在zsh或 中bash。
我正在处理一个嵌入式系统,它有一些可以通过文件描述符访问的内存(我不知道我在说什么,所以如果我错了,请纠正我)。
该内存为 32 kB,我想用 0x00 到 0xFFFFFFFF 填充它。我知道文本文件是这样的:
exec {fh} >> ./eeprom;
for i in {0..32767}; do echo $i >& $fh; done; $fh>&-;
Run Code Online (Sandbox Code Playgroud)
这将写入 ASCII 字符 0 到 977。
如果我这样做,hexdump eeprop | head我会得到:
0000000 0a30 0a31 0a32 0a33 0a34 0a35 0a36 0a37
0000010 0a38 0a39 3031 310a 0a31 3231 310a 0a33
0000020 3431 310a 0a35 3631 310a 0a37 3831 310a
0000030 0a39 3032 320a 0a31 3232 320a 0a33 3432
0000040 320a 0a35 3632 320a 0a37 3832 320a 0a39 …Run Code Online (Sandbox Code Playgroud) 我有input.txt以下 TAB 分隔格式的数据文件-
23776112 Inactive Active
23415312 Inactive Active
Run Code Online (Sandbox Code Playgroud)
根据要求,在while循环内,我想使用剪切第一列的数据并打印它-
以下是部分代码-
......
......
while read line
do
SN=`echo ${line}|cut -d ' ' -f1`
echo $SN
done < input.txt
....
....
Run Code Online (Sandbox Code Playgroud)
要将制表符用作上面的分隔符,我正在使用 Ctrl V Tab
但输出并不如预期。我得到 O/P-
23776112 Inactive Active
23415312 Inactive Active
Run Code Online (Sandbox Code Playgroud)
而我想要 O/P 之类的 -
Run Code Online (Sandbox Code Playgroud)23776112 23415312
可执行文件 (cURL) 的输出包含 \n。如何用换行符显示这样的输出?
假设一个可执行文件的输出是tCL\n1523 memo\n,管道到 printf 不显示换行符。
$ echo "tCL\n1523 memo\n"
tCL\n1523 memo\n
$
$ printf "tCL\n1523 memo\n"
tCL
1523 memo
$
$ echo "tCL\n1523 memo\n" | xargs -0 printf '%s'
tCL\n1523 memo\n
$
$ echo "tCL\n1523 memo\n" | awk '{ printf "%s", $0 }
tCL\n1523 memo\n
Run Code Online (Sandbox Code Playgroud)