3
#!/bin/bash

IFS='\n' 
declare -i count=0

AX=$(find *.iso -maxdepth 1 -type f) # Rather use AX="$(find *.iso -maxdepth 1 -type f"?
# A="${AX%x}" < Could I use this when applying "" to $() in AX? But it should already include newlines like this way. edit: I don't need the trailing newlines fix.

for iso in "$AX"
 do
  echo "Use "$iso"? [Y/N]?" # Outputs ALL files, IFS has no force somehow
  read choiceoffile
  shopt -s nocasematch
  case $choiceoffile in
  y ) echo "Using selected file.";;
  * ) continue;;
  esac
  # some sort of processing
done

コマンド置換は正しく行われていますか? 変数は for ループの IFS \n では機能しません。なぜこれが発生するのかわかりません。

for ループは、find の出力を行ごとに処理することにより、空白を含むファイル名を処理することになっています (これが、IFS \n を使用する理由です)。

4

3 に答える 3

2

変数は for ループの IFS \n では機能しません。なぜこれが発生するのかわかりません。

IFS='\n'IFS改行に設定されずIFS、リテラル文字列に設定されます\n。IFS を改行に設定する場合は、次を使用します。

IFS=$'\n'
于 2015-07-08T14:09:57.733 に答える
1

私は今それを修正しました。forループ内の変数の引用符を捨て、冒頭のIFSの宣言を修正し、不要なパイプを削除しました。
これは、空白の問題に対する適切な解決策になるはずです
。おかげで、これを作業中のスクリプトに挿入できるようになりました。なぜ私は引用符を保持したのですか?

#!/bin/bash

IFS=$'\n'   

AX=$(find *.wbfs -maxdepth 1 -type f )  

for wbfs in $AX  
 do  
  echo "Use "$wbfs"? [Y/N]?"  
  read choiceoffile  
  shopt -s nocasematch  
    case $choiceoffile in  
      y ) echo "Using selected file.";;  
      * ) continue;;  
    esac  
   # some sort of processing  
done  
于 2015-07-08T14:27:45.750 に答える
1

findここでの最初のループの必要性はまったくありません。

これはあなたが望むことをしますか?

for iso in *.iso
 do
  echo "Use $iso? [Y/N]?"
  read choiceoffile
  shopt -s nocasematch
  case $choiceoffile in
  y ) echo "Using selected file.";;
  * ) continue;;
  esac
  # some sort of processing
done

n)また、デフォルトのケースが問題なく処理されるため、役に立たないケースも削除しました。

于 2015-07-08T14:25:05.060 に答える