3

データを格納するファイル階層を作成しようとしています。データ取得セッションごとにフォルダーを作成したいと考えています。そのフォルダーには、以下に名前が付けられている 5 つのサブフォルダーがあります。以下のコードを試すとエラーが発生しますが、それを修正する方法がわかりません。

コード

 #!/bin/sh
 TRACES = "/Traces"
 LFPS = '/LFPS'
 ANALYSIS = '/Analysis' 
 NOTES = '/Notes'
 SPIKES = '/Spikes'

 folders=($TRACES $LFPS $ANALYSIS $NOTES $SPIKES)
 for folder in "${folders[@]}"
  do
    mkdir $folder
  done

エラー 変数の宣言時にエラーが発生します。上記のようにbash、エラーを反転しますCommand not found。代わりに、ファイル名を として宣言するとTRACES = $('\Traces')bashエラーが反転しますNo such file or directory

4

4 に答える 4

7

変数名と値の間のスペースを削除します。

#!/bin/sh
TRACES="/Traces"
LFPS='/LFPS'
ANALYSIS='/Analysis' 
NOTES='/Notes'
SPIKES='/Spikes'

folders=($TRACES $LFPS $ANALYSIS $NOTES $SPIKES)
for folder in "${folders[@]}"
 do
   mkdir $folder
 done

スペースを使用すると、bashこれを次のように解釈します

COMMAND param1 param2

=として_param1

于 2012-11-11T18:29:50.900 に答える
5

与えられた修正の「変数割り当ての周りにスペースを入れない」部分を使用しています。

配列表記の使用はやり過ぎのように思えます。名前に可能なスペースを許可すると、次を使用できます。

for dir in "$TRACE" "$LFPS" "$NOTES" "$PASS"
do mkdir "$dir"
done

しかし、それでも無駄です:

mkdir "$TRACE" "$LFPS" "$NOTES" "$PASS"

ディレクトリが存在するのではないかと心配している場合は、次の方法でエラー メッセージを回避できます。

mkdir -p "$TRACE" "$LFPS" "$NOTES" "$PASS"

この-pオプションは、パスが長く、中間ディレクトリの一部が欠落している可能性がある場合にも役立ちます。名前にスペースが含まれないことが確実な場合は、二重引用符はオプションになります (ただし、二重引用符は安全で安価なので、使用することもできます)。

于 2012-11-11T19:00:59.593 に答える
3

また、フォルダーが存在するかどうかを事前に確認する必要があります。また、set -x を使用していつでもシェル スクリプトをデバッグできます。「mkdir -p」を使用するだけでうまくいきます。

于 2012-11-11T18:37:49.630 に答える
2

スクリプトを実行するために、次の変更を加えました。

レビュー コメントとして、ルート ファイル システムからぶら下がっているようなフォルダを作成するのは珍しいことです。

#!/bin/sh
TRACES="/Traces"
LFPS='/LFPS'
ANALYSIS='/Analysis'
NOTES='/Notes'
SPIKES='/Spikes'

folders="$TRACES $LFPS $ANALYSIS $NOTES $SPIKES"
for folder in $folders
do
   mkdir $folder
done

最初の変数割り当てからスペースを削除し、for ループを単純化して、文字列内の単語を繰り返し処理できるようにしましたfolders

于 2012-11-11T18:33:38.447 に答える