このシェルスクリプトをファイルに保存しました。基本的な文字列の置換を行います。
#!/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
上記のエコーからの出力です-意図したとおりに機能しています。
しかし、スクリプトを呼び出すと、
$ 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か何かを使用していますか?シバンラインを変更する必要がありますか?
@ Hunter.S.Thompsonからの優れた回答に加えて、スクリプトの移植できない部分は
pdf_file="${html_file/.html/.pdf}"
${variable/search/replace}
はGNU拡張機能です。ただし、純粋なPOSIXを使用すると簡単に回避できます。
pdf_file="${html_file%.html}".pdf
ハンターに続いて、これはシバンを#! /bin/bash
に変更するよりも良い修正です。