所以我试图进行比较,恰好是我正在检查的值与计算机上的命令同名,这是一个问题。
这是我跑的命令。
if $current_branch != "HEAD"; then echo '1'; fi;
这是结果,因为你可以看到HEAD程序运行。
400 URL must be absolute
Content-Type: text/plain
Client-Date: Thu, 01 Mar 2018 16:45:48 GMT
Client-Warning: Internal response
200 OK
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Connection: keep-alive
Date: Thu, 1 Mar 2018 16:45:49 GMT
Server: PWS/8.3.1.0.8
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Access-Control-Allow-Origin: https://www.head.com
Client-Date: Thu, 01 Mar 2018 16:45:49 GMT
Client-Peer: 151.249.91.221:443
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
Client-SSL-Cert-Subject: /C=US/ST=California/L=Campbell/O=CDNetworks Inc./CN=support2.cdnetworks.net
Client-SSL-Cipher: ECDHE-RSA-AES256-SHA
Client-SSL-Socket-Class: IO::Socket::SSL
Content-Security-Policy: frame-ancestors 'self' https://head.testing-varnish.symmetrics.de
Set-Cookie: geoip=IC; expires=Sat, 31-Mar-2018 16:45:49 GMT; Max-Age=2592000; path=/; domain=head.com
Set-Cookie: lang=en; expires=Sat, 31-Mar-2018 16:45:49 GMT; Max-Age=2592000; path=/; domain=head.com
Set-Cookie: currentLangId=1; expires=Sat, 31-Mar-2018 16:45:49 GMT; Max-Age=2592000; path=/; domain=head.com
Set-Cookie: root=1; expires=Sat, 31-Mar-2018 16:45:49 GMT; Max-Age=2592000; path=/; domain=head.com
X-Frame-Options: SAMEORIGIN
X-Px: nc h0-s42.p1-arn ( h0-s4012.p6-lhr>CONN), nc h0-s4012.p6-lhr ( h0-s4102.p11-fra), nc h0-s4102.p11-fra ( origin)
那么我如何避免这种情况发生并且没有命令与我想要比较的字符串值冲突?
答案 0 :(得分:1)
if
的参数总是一个命令。您可能正在寻找比较字符串的特殊命令[
(又名test
)。
if [ "$current_branch" != "HEAD" ]; then
echo '1'
fi
请注意[
和]
标记两边都有空格的要求,以及引用可能包含shell元字符的字符串的要求。
根据您是否需要pre-POSIX兼容性,您可能还想反转否定。另一方面,在像Bash和Ksh这样的现代shell中,你可能想要使用更强大且更通用的替换[[
。
终止]
对称性的要求纯粹是美学的,但仍然是一项要求。原始的Bourne shell没有内置于shell本身的字符串比较功能,这是非常古怪的,但是,这就是我们最终的结果。
顺便说一句,如果您的示例代表您的实际代码,您可能希望使用更简约的简写语法
[ "$current_branch" = "HEAD" ] || echo '1'