このスクリプトは、コマンドラインから引数として名前が付けられたすべてのファイルをユーザーのホームディレクトリにコピーする必要があります。ファイルが提供されていない場合、スクリプトは読み取りを使用してファイル名を要求し、応答に指定されたすべてのファイル名をユーザーのホームディレクトリにコピーする必要があります。
if [ -z $1 ]
then
echo provide filenames
read $FILENAMES
else
FILENAMES="$@"
fi
echo the following filenames have been provided: $FILENAMES
for i in $FILENAMES
do
cp $i $HOME
done
文字列形式でパラメータを指定すると機能します。しかし、「$ FILENAMESを読む」を提供しても機能しません。
講師は自分のコースで同じ解決策を示しましたが、どのように機能するかは示していません。
更新ファイル名をパラメーターとして入力した後、空の文字列が提供され、ファイルが$ HOMEの場所にコピーされませんでした。
[dmytro@oc1726036122 ~]$ cd Desktop/
[dmytro@oc1726036122 Desktop]$ . totmp
provide filenames
one two
the following filenames have been provided:
the following filenames have been provided:
[dmytro@oc1726036122 Desktop]$
ベストアンサー1
read
変数を読むのではなく宣言してください。一言で$
内容を削除するだけread
です。
if [ -z $1 ]
then
echo provide filenames
read FILENAMES
else
FILENAMES="$@"
fi
echo the following filenames have been provided: $FILENAMES
for i in $FILENAMES
do
cp $i $HOME
done
source
編集:(.
)コマンドを使用してスクリプトを実行することを確認しました。
[dmytro@oc1726036122 Desktop]$ . totmp
この特定のスクリプトには問題ありませんが、複雑なスクリプトには絶対にこれを実行しないでください。それ以外の場合は、スクリプト内のすべての変数または関数をシェルにインポートします。ただ使用bash totmp