ディレクトリ内のすべてのファイル/ディレクトリを繰り返そうとします。これには、すべての隠しファイル(.
および除外..
)も含まれます。 Bashの前のトピックでは、次を使用することをお勧めします。
for current in $1/$run_folder/{..?,.[!.],}*;
echo current
done
私はそれを試しましたが、うまくtcsh
いきませんでした。どうすればいいですかtcsh
?
答え1
私はほとんど使用していませんが、オプション1を使用すると必要なものが得られtcsh
ます。globdot
globdot (+) If set, wild-card glob patterns will match files and directo‐ ries beginning with `.' except for `.' and `..'
だから
#!/bin/tcsh
set globdot
foreach current ($1:q/$run_folder:q/*)
printf '%s\n' $current:q
end
間違っている可能性があるので注意してください一致しないディレクトリに隠しファイルがない場合、エラーが発生します。
この問題は、一致することが知られているワイルドカードを含めて解決できます*
。
#!/bin/tcsh
set globdot
set files = (/de[v] $1:q/$run_folder:q/*)
shift files
foreach current ($files:q)
printf '%s\n' $current:q
end
しかし、正しい構文は次のbash
とおりです。
#! /bin/bash -
shopt -s nullglob dotglob
for current in "$1/$run_folder"/*; do
printf '%s\n' "$current"
done
echo
任意のデータに使用できない一重引用符を拡張することを忘れ、基本的に一致しないグローバル変数を誤って残しました。このdotglob
オプション(csh / tcsh / zshと同じglobdot
)は、これら3つの異なるglobを必要としません。
メモ:
(+)
機能があることを示します。「ほとんどのcsh(1)実装(特に4.4BSD csh)では見つかりません。」