ユーザーの入力を読み取るbashスクリプトを作成しようとしています(ユーザーがTAB
を使用できるようにする)。Bash:スペースに分割されてエスケープされたスペースにはない
#/bin/bash
read -e files
for file in $files
do
echo $file
cp "$file" folder/"$file"
done
それはのために大丈夫だ:file1 file2 ...
かと:file*
(フォルダ内のスペースを持つファイル名が存在する場合であっても)。
しかし、バックスラッシュでエスケープされたスペースのあるファイル名では、\
のようには機能しません。file\ with\ space
エスケープスペースは無視され、各スペースで文字列が分割され、エスケープさえさえなります。
quoting、printf、IFS、read、whileの情報を見ました...私は基本的なbashスクリプトだと思いますが、良い解決策を見つけることはできません。手伝って頂けますか?文字列がどちらかに分割されます:あなたが引用どのように関係なく動作しません単一の文字列に読み込む
read -e -a files
for file in "${files[@]}"; do
echo "$file"
cp "$file" folder/"$file"
done
:
その他:UNIXのスペルは「ディレクトリ」であり、「フォルダ」ではありません。 –
'$ files'を引用するだけではいかがですか?(例えば、" $ files "のファイル)? –
@ l'L'l、これはOPが明示的に望むグロブを無効にするためです。 –