所以我想构造一个命令来优先打印动态字符串。
我有变量:
a=first
b=second/third/fourth/...
Run Code Online (Sandbox Code Playgroud)
我想运行sed
命令b
sed -e 's/\//_/g'
Run Code Online (Sandbox Code Playgroud)
我得到
second_third_fourth_
Run Code Online (Sandbox Code Playgroud)
然后我想打印,a/${b}
所以它变成了`
first/second_third_fourth_
Run Code Online (Sandbox Code Playgroud)
像这样的东西:
echo first/(second/third/fourth... | sed -e 's/\//_/g' )
Run Code Online (Sandbox Code Playgroud)
我是 bash 脚本的新手,需要为 CI 环境执行此操作。
与 echo 一起使用的 -e 开关使其能够理解转义序列,如下所示:
[root@localhost~]# echo -e 'hello\b\bhi'
helhi
[root@localhost~]#
Run Code Online (Sandbox Code Playgroud)
但是,转义序列似乎在下面的代码段中被跳过了:
[root@localhost~]# echo -e 'hello\b\b'
hello
[root@localhost~]#
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助理解上述代码片段的行为吗?
当上面相同的代码片段与“-n”开关结合执行时,它起作用了!(当然,使用 -n 行为删除换行符)
[root@localhost~]# echo -n -e 'hello\b\b'
hel[root@localhost~]#
Run Code Online (Sandbox Code Playgroud)
问候
我正在尝试PATH
使用 zsh 5.8 将 的成员读入数组。我习惯使用 Bash,通常可以执行以下操作:
IFS=: p=($PATH)
Run Code Online (Sandbox Code Playgroud)
然而,对于 zsh,这实际上给了我一个只有一项的数组。如果我改写:
IFS=: p=($(echo $PATH))
Run Code Online (Sandbox Code Playgroud)
然后我得到正确的元素数量。这是为什么?
如果我在 bash 脚本(类似于此脚本)中运行以将内容发送到文件:
sudo ./bar.sh > foo
Run Code Online (Sandbox Code Playgroud)
内容bar.sh:
echo 'for pid in $(ps -ef | grep "smbd" | awk '{print $2}'); do kill -9 $pid &> /dev/null; done'
Run Code Online (Sandbox Code Playgroud)
foo 输出:
for pid in $(ps -ef | grep "smbd" | awk {print }); do kill -9 $pid &> /dev/null; done
Run Code Online (Sandbox Code Playgroud)
$2
是迷失在外面。
预期输出:
for pid in $(ps -ef | grep "smbd" | awk '{print $2}'); do kill -9 $pid &> /dev/null; done
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到它?
我有一个 Bash 脚本,具有记录带有时间和状态的消息的功能,并且我只想保留我的脚本 80 列:
#!/bin/bash
log_message() {
echo "[$(date)]-[$1] : $2" >> log.txt
}
varName="John Doe"
# line break to not exceed 80 columns
log_message "WARNING" "I am "${varName}" and i want to limit this line \
to 80 columns"
Run Code Online (Sandbox Code Playgroud)
日志文件中的结果不符合预期:
[Fri Jun 24 13:50:12 CEST 2022]-[WARNING] : I am John
Run Code Online (Sandbox Code Playgroud)
在 Bash 中执行此操作的正确方法是什么?
我想知道为什么会在我的外壳中打印额外的回声。我使用的是bash
4.2.46(1) 版。
echo `echo `echo $SHELL``
Run Code Online (Sandbox Code Playgroud)
一个有趣的问题是,如果我'``'
用$()
它替换不会打印额外的回声:
echo $(echo `echo $SHELL`)
Run Code Online (Sandbox Code Playgroud)
我发现它以奇数echo
命令号打印额外的回声:
echo `echo `echo `echo `echo $SHELL````
Run Code Online (Sandbox Code Playgroud) 该echo
命令不想解释反冲转义(附加 -e 选项)。例如,我希望它响铃:
echo -e \a
什么也没发生,除了打印:
a
或
\a
如何打开口译或如何解决?
我将一个 echo 命令通过管道传输到另一个
echo a b c d e f g h i | echo
echo $?
0
Run Code Online (Sandbox Code Playgroud)
与我的直觉相反,没有输出,但也没有返回错误。我预期,that echo a b c d | echo
只是一个不必要的冗余替代echo a b c d
。但事实并非如此,为什么争论在通过管道的途中丢失了?