我将这个shell脚本保存在一个文件中:它执行一些基本的字符串替换。
#!/bin/sh
html_file=$1
echo "html_file = $html_file"
substr=.pdf
pdf_file="${html_file/.html/.pdf}"
echo "pdf_file = $pdf_file"
如果我将其粘贴到命令行中,则可以正常工作:
$ html_file="/home/max/for_pauld/test_no_base64.html"
echo "html_file = $html_file"
substr=.pdf
pdf_file="${html_file/.html/.pdf}"
echo "pdf_file = $pdf_file"
给
html_file = /home/max/for_pauld/test_no_base64.html
pdf_file = /home/max/for_pauld/test_no_base64.pdf
那是上面echo的输出-它按预期工作。
但是,当我调用脚本时,
$ saucer "/home/max/for_pauld/test_no_base64.html"
我得到以下输出:
html_file = /home/max/for_pauld/test_no_base64.html
/home/max/bin/saucer: 5: /home/max/bin/saucer: Bad substitution
我的脚本使用的是bash的其他版本还是其他版本?我需要更改我的shebang行吗?
sh
和之间的区别有点模糊bash
。我会继续阅读。如果您愿意将您的评论写成答案,那么我将其标记为正确。
#!/usr/bin/env bash
作为您的Shebang,并根据需要使用posixly定义的替代方法,但要注意可移植性。并阅读:unix.stackexchange.com/a/48787/27616