如何将测试运算符从bash转换为sh?

时间:2018-03-05 12:54:24

标签: bash sh

我在bash中有下一个字符串比较:

if [[ $1 == "/"* ]]; then echo YES; else echo "$1"; fi

如何在sh中执行相同操作?

3 个答案:

答案 0 :(得分:2)

您可以使用def _request_url(method, url): session = requests.session() adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1) session.mount("https://", adapter) return response = session.request(method, url) 语句执行此操作。

case

直接翻译将是case $1 in /*) echo YES;; *) echo $1 esac ,但它不会起作用,因为sh不支持那里的glob匹配。您需要调用if [ "$1" = "/*" ]等外部命令。

grep

if printf '%s\n' "$1" | grep -e '^/' >/dev/null 2>&1; then ... fi 这会更短,但如果您没有bash,那么您可能也没有grep -q

答案 1 :(得分:1)

2000-today语句优雅地处理这个问题。

case

case $1 in '/'* ) echo YES;; *) echo "$1";; esac 之前缺少引用以及带有双分号和未成对的右括号的一般语法对新手来说是不和谐的,但是你很快就会习惯它。它非常多才多艺而且不受重视。

如果你坚持使用in,你可以做一些像

这样的事情
[

使用一些参数扩展来提取变量的第一个字符;但是if temp=${1#?}; [ "${1%$temp}" -eq '*' ]; then ... 内置了glob模式匹配,所以它的可读性更高。

答案 2 :(得分:0)

如果您希望匹配if语句中的模式或正则表达式shfish,则可以使用

if echo "$1" | grep -q ^/; then echo yes; else echo "$1"; fi