Невозможно указать имя файла с пробелом

1593
Anil Bhargava

Я очень новичок в написании сценариев и написании сценариев для проекта. У меня проблема при выполнении «stat» для имени файла, чтобы проверить размер, в котором есть пробелы. Проблема в том, что я не могу написать команду напрямую, и сначала я должен сохранить ее в переменной, а затем выполнить ее через эту переменную. Например, мой скрипт:

##test.sh ###Start OIFS=$IFS  IFS=$'\n'  filename=$1  a=stat b=-c  c=%s d=$  CMD="$a $b $c $d"  result=`$CMD`  echo "Size is:"$result  IFS=$OIFS ###END 

Я установил IFS = $ '\ n', чтобы передать имя файла с пробелом в качестве параметра. когда я выполняю это, тогда я получаю:

[root@abhargava ~]# ./test.sh dirLevel1/file\ Level1.txt ./test.sh: line 9: stat -c %s dirLevel1/file Level1.txt: No such file or directory Size is: 

Из-за IFS я думаю, что shell рассматривает команду как единое целое, не разбивая ее на части, и если я удаляю эту настройку IFS, то она говорит:

[root@abhargava ~]# ./test.sh dirLevel1/file\ Level1.txt stat: cannot stat `dirLevel1/file': No such file or directory stat: cannot stat `Level1.txt': No such file or directory Size is: 

Поэтому он рассматривает параметр как два разных файла. Я не могу использовать "$ @" также потому, что получаю имя файла из какой-то другой логики перечисления файлов в каталоге, например

for i in 'find $ -type f' do calling the test.sh done 

Пожалуйста, помогите мне как можно скорее .. !! Заранее спасибо....!!

2
Обновил форматирование, чтобы сделать его более разборчивым, пожалуйста, проверьте еще раз, чтобы убедиться, что я ничего не заменил случайно. nerdwaller 11 лет назад 0

2 ответа на вопрос

1
Ignacio Vazquez-Abrams
Решил мою проблему, используя массив вместо отдельных переменных Спасибо большое ... :) Anil Bhargava 11 лет назад 0
0
DaveSB

Я согласен с Игнасио: лучше всего придерживаться простых сценариев Bash. Исходя из этого, я упростил скрипт, чтобы он мог работать с пробелами. Чтобы позволить ему обрабатывать пробелы, включение имени файла в кавычки позволило скрипту иметь дело с пробелами в имени файла.

##test.sh ###Start  result=`stat -c %s "$1"`  echo "Size is:"$result  ###END 

Похожие вопросы