使用busybox和ash运行基于镜像的高山:
/mnt/builddir/code/src/main/helm # busybox | head -1
BusyBox v1.31.1 () multi-call binary.我编写了一个sh脚本,仅当文件名以“value”前缀开头时才打印文件名,但带有" if“条件的文件名不能很好地工作。这是我的脚本:
for f in ./*
do
echo ${f##*/}
if ${f##*/} == 'values'*; then
echo $f
fi
done输出:
/mnt/builddir/code/src/main/helm # ./script.sh
Chart.yaml
./script.sh: line 4: Chart.yaml: not found
script.sh
./script.sh: line 4: script.sh: not found
values-feature.yaml
./script.sh: line 4: values-feature.yaml: not found
values-int.yaml
./script.sh: line 4: values-int.yaml: not found
values-prod.yaml
./script.sh: line 4: values-prod.yaml: not found
values-stg.yaml
./script.sh: line 4: values-stg.yaml: not found
values.yaml
./script.sh: line 4: values.yaml: not found在我将代码更改为上面的代码之前,if条件是这样的:
if [[ ${f##*/} == values* ]]
then
...但这也不起作用。
谢谢你的建议...
发布于 2021-04-14 18:47:24
该脚本中有两个明显的问题:在if行中,您没有调用测试(1),而是直接尝试运行每个文件;测试(1) ==操作符只执行精确的字符串比较,而不执行glob或正则表达式匹配。
您可以使用shell case语句将变量与glob匹配:
case "$f" in
*/values*)
echo "$f"
;;
esac但是外壳for语句可以遍历glob扩展,这通常是一个更简单的设置:
for f in values*; do
echo "$f"
done(这完全不是Docker所特有的,我希望您在主机上直接运行该脚本时会遇到非常类似的错误。您可能会发现,没有Docker作为您和您要修复的代码之间的隔离层,开发和调试脚本会容易得多。)
https://stackoverflow.com/questions/67089998
复制相似问题