Bashスクリプト内では、名前に特殊文字を含むファイルへのシンボリックリンクをエコーまたは生成することはできません。

Bashスクリプト内では、名前に特殊文字を含むファイルへのシンボリックリンクをエコーまたは生成することはできません。

次の命名規則を使用してファイルへのシンボリックリンクを作成しようとしています。

.$abc$namehere.zip;1

ご覧のとおり、次の特殊文字があります。 $;

私のbashスクリプトには次のコード行があります。

FILE1=`find /mydir/ -name "\.\$abc\$*namehere*.zip*" | sort -rn | head -1`
ln -s $FILE1 .
echo "$FILE1"

コマンドラインから個別にコマンドを実行すると、find目的のファイルの結果が画面に表示されます。ただし、上記のスクリプト内に配置すると、Symlinkコマンドは次のように返します。

ln: `./.': cannot overwrite directory

echo コマンドはファイル名の代わりに空行を返します。

特殊文字を使用してこれらのファイルへのシンボリックリンクを作成できるように、スクリプトでこの問題を解決する方法についてお役立てください。

ベストアンサー1

$()逆引用符の代わりに使用:

FILE1=$(find /mydir/ -name "\.\$abc\$*namehere*.zip*" | sort -rn | head -1)
ln -s "$FILE1" .
echo "$FILE1"

問題は、ファイル名を二重引用符で囲んだため、bashがファイル名を拡張することです。

\.\$abc\$*namehere*.zip*

に拡張

\.namehere*.zip*

$()これがバックティックが使用されなくなり、常に好まれるべき多くの理由の1つです。

おすすめ記事