Bashスクリプトのコマンドラインから感嘆符付きのファイルを抽出する

Bashスクリプトのコマンドラインから感嘆符付きのファイルを抽出する

名前に感嘆符を含むzipファイルを解凍するための簡単なスクリプトを作成しようとしています。

#!/bin/bash
UNZIP='/usr/bin/unzip'
CUT="/usr/bin/cut"
GREP="/usr/bin/grep"
FILENAME="test"

FILE="/usr/local/var/www/htdocs/"$FILENAME"\!3.zip"
UNZIPPEDFOLDER=$($UNZIP ${FILE} | $GREP -m1 'creating:' | $CUT -d' ' -f5-)
echo $UNZIPPEDFOLDER

ただし、スクリプトが実行されると解凍が返されます。

unzip:  cannot find or open /usr/local/var/www/htdocs/test\!3.zip, /usr/local/var/www/htdocs/test\!3.zip.zip or /usr/local/var/www/htdocs/test\!3.zip.ZIP.

「!」がないとうまくいきます。ファイル名を記録しますが、一部の操作を自動化するには、元のファイル名を保持する必要があります。

ベストアンサー1

!はコマンド履歴拡張文字なので、レコード拡張が有効になっている場合は、コマンドラインに引用符が必要です。スクリプト内でこれを参照する必要はありません。

マニュアルページから:

コマンド履歴拡張機能(以下のHISTORY EXPANSIONを参照)を使用するときに履歴拡張を防ぐには、履歴拡張文字(通常は!)を引用する必要があります。

そして

デフォルトでは、非対話型シェルは履歴拡張を実行しません。

詳細を確認、man bash検索QUOTING、確認してください。HISTORY EXPANSION

おすすめ記事