このスクリプトは、コマンドラインで引数として名前が指定されているすべてのファイルをユーザーのホームディレクトリにコピーする必要があります。ファイルが提供されていない場合、スクリプトは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
文字列として引数を指定すると、機能します。しかし、「read $ 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]$
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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加