最近在一次代码审查中,一位同事声称该[[ ]]构造比[ ]在类似的构造中更受欢迎
if [ "`id -nu`" = "$someuser" ] ; then
echo "I love you madly, $someuser"
fi
Run Code Online (Sandbox Code Playgroud)
他无法提供理由.有吗?
据我所知,&在命令之后使用是为了在后台运行它.
&用法示例:tar -czf file.tar.gz dirname &
但是怎么样&&?(看看这个例子:https://serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188)
我var在一个包含字符串的Bash脚本中有一个变量,如:
echo $var
"some string.rtf"
Run Code Online (Sandbox Code Playgroud)
我想删除此字符串的最后4个字符并将结果分配给新变量var2,以便
echo $var2
"some string"
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
有人能告诉我是否应该在shell脚本中包含变量的引号?
例如,以下是正确的:
xdg-open $URL
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)
要么
xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
以下代码有什么问题?
name='$filename | cut -f1 -d'.''
Run Code Online (Sandbox Code Playgroud)
因为,我得到文字字符串$filename | cut -f1 -d'.',但如果我删除引号,我什么都没得到.同时打字
"test.exe" | cut -f1 -d'.'
Run Code Online (Sandbox Code Playgroud)
在shell中给我输出我想要的输出test.我已经知道$filename已经分配了正确的价值.我想要做的是为变量分配没有扩展名的文件名.
我想找一个可以返回字符串一部分的linux命令.在大多数编程语言中,它都是substr()功能.bash是否有任何可用于此目的的命令.我希望能够做这样的事情......
substr "abcdefg" 2 3- 打印cde.
随后的类似问题:
以下是一系列echo $var可以显示与刚刚分配的值不同的值的情况.无论指定的值是"双引号","单引号"还是不引用,都会发生这种情况.
如何让shell正确设置我的变量?
星号
预期的输出是/* Foobar is free software */,但我得到一个文件名列表:
$ var="/* Foobar is free software */"
$ echo $var
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
Run Code Online (Sandbox Code Playgroud)
方括号
期望值是[a-z],但有时我会得到一个字母!
$ var=[a-z]
$ echo $var
c
Run Code Online (Sandbox Code Playgroud)
换行(换行符)
预期值是一个单独的行列表,但所有值都在一行!
$ cat file
foo
bar
baz
$ var=$(cat file)
$ echo $var
foo bar baz
Run Code Online (Sandbox Code Playgroud)
多个空间
我期望一个精心对齐的表头,但是多个空格要么消失要么折叠成一个!
$ var=" title | count"
$ echo $var
title | count
Run Code Online (Sandbox Code Playgroud)
标签
我期望两个制表符分隔值,但我得到两个空格分隔值!
$ …Run Code Online (Sandbox Code Playgroud) 当我在我的shell中调查这个问题的答案时,我注意到,即使/bin/sh指向/bin/bash我的系统,这两个命令的行为也不同.首先,输出
ls -lh /bin/sh
Run Code Online (Sandbox Code Playgroud)
是:
lrwxrwxrwx 1 root root 4 Apr 22 2013 /bin/sh -> bash*
Run Code Online (Sandbox Code Playgroud)
但是,通过以下方式调用以下命令/bin/sh:
/bin/sh -c "script.sh 2> >( grep -v FILTER 2>&1 )"
Run Code Online (Sandbox Code Playgroud)
返回此错误:
/bin/sh: -c: line 0: syntax error near unexpected token '>'
/bin/sh: -c: line 0: 'script.sh 2> >( grep -v FILTER 2>&1 )'
Run Code Online (Sandbox Code Playgroud)
通过/bin/bash以下命令运行相同的命令:
/bin/bash -c "script.sh 2> >( grep -v FILTER 2>&1 )"
Run Code Online (Sandbox Code Playgroud)
执行成功,这是输出:
This should be on stderr
Run Code Online (Sandbox Code Playgroud)
供参考,以下是以下内容script.sh: …
操作员=~叫什么?它只用于比较左侧的右侧吗?
运行测试时为什么需要双方括号?
即. [[ $phrase =~ $keyword ]]
谢谢
bash ×9
shell ×6
linux ×4
sh ×3
syntax ×2
unix ×2
command-line ×1
cut ×1
if-statement ×1
ip-address ×1
networking ×1
quotes ×1
quoting ×1
ssh ×1
string ×1
substr ×1