シェル スクリプトの zip の問題。なぜ間違っているのでしょうか?

シェル スクリプトの zip の問題。なぜ間違っているのでしょうか?

シェル スクリプト file_locker.sh を記述して、ファイルを zip 圧縮し、指定された長さのランダムに生成された PIN のハッシュ パスワードで保護し、PIN を指定されたファイルに保存します。

#!/bin/bash
file_locker(){

m=$1
for ((i=1;i<=m;i++));
do
num=($(( 0 + RANDOM % 9 )))

echo -n "$num"

done > $3

mypin=$(echo $3)
echo pin $mypin

myhash=$(echo $mypin | sha256sum)
echo hash $myhash

zip -P $myhash $2.zip -r $2 && rm $2

}
file_locker $1 $2 $3

しかし、コマンドラインでは次のように表示されます:

zip error: Invalid command arguments (cannot write zip file to terminal)

zip コマンドを改善する方法がわかりません。助けてください。

答え1

引数には引用符を使用する必要があります...
また、for ループでは m の代わりに $m を使用してください。

#!/bin/bash
file_locker(){

m="$1"
for ((i=1;i<=$m;i++));
do
num=($(( 0 + RANDOM % 9 )))

echo -n "$num"

done > "$3"

mypin=$(echo "$3")
echo pin "$mypin"

myhash=$(echo "$mypin" | sha256sum)
echo hash "$myhash"

zip -P "$myhash" "$2".zip -r "$2" && rm "$2"

}
file_locker "$1" "$2" "$3"

zip エラー: 無効なコマンド引数です。

引数にスペースが含まれている場合は、このようになります...

関連情報