シェルスクリプトのファイル拡張子の検出で `A B.py C D.py`を `A.py B.py C.py D.py`に変換する[閉じる]

シェルスクリプトのファイル拡張子の検出で `A B.py C D.py`を `A.py B.py C.py D.py`に変換する[閉じる]

関連この投稿への回答
入力がある場合、A B.py C D.py出力は次のようになります。A.py B.py C.py D.py

以下に提供されている他のスクリプトでこの機能を実装したいと思います。

#!/bin/bash

echo -n "Round Name:"
read round
mkdir $round

read -r -p "Enter the filenames:" -a arr
for filenames in "${arr[@]}"; do 
cp ~/Documents/Library/Template.py $round/$filenames
done

どうすればいいですか?

答え1

あなたが望むものは、.pyすでに存在しない限り、各パラメータにサフィックスを追加するようです。

このサンプルコードに示すように、単純な変数を使用してこれを実行できます。

for item in A A.py
do
    dest=${item%.py}.py
    echo "Demonstrating that '$item' becomes '$dest'"
done

ここでは、変数置換を使用して末尾を削除し、.py(必要な場合)常に.py再追加します。ステートメント内に一重引用符はecho必要ありません。

関連情報