我有以下命令"${CHROMEDRIVER//@([\/])/}"
是外壳文件,并且在运行bash file.sh
时不起作用:
#!/bin/bash
CHROMEDRIVER="75.0.3770.8/"
echo $CHROMEDRIVER
echo "${CHROMEDRIVER//@([\/])/}"
但是,当我在终端中运行相同的cmd "${CHROMEDRIVER//@([\/])/}"
时,效果很好
答案 0 :(得分:3)
此命令需要启用extglob
支持。大概是在点文件中将其打开(使用shopt -s extglob
),但是在脚本中默认为关闭。
请参见the bash-hackers' wiki on extended pattern language,其中描述了需要启用extglob
标志的特定项目; @(...)
在其中。
因此,要在不更改要替换的模式的情况下修复脚本,
#!/usr/bin/env bash
shopt -s extglob
CHROMEDRIVER="75.0.3770.8/"
echo "$CHROMEDRIVER"
echo "${CHROMEDRIVER//@([\/])/}"
...尽管您的目标只是去除斜杠,但应使用"${CHROMEDRIVER%/}"
,如the bash-hackers' wiki page on parameter expansion中所述。