Я думаю причина, Вы ожидаете что-то другое, чем, что происходит, то, что Вы берете
[0-9]{n}
означать соответствие только точно n случаи символов в [0-9] и выбрасывать остальных, когда, что его выполнение находит n случаями символов в [0-9] и называет это соответствием. Таким образом в
[0-9]{1}
это находит любого точно одним возникновением чего-то соответствующего [0-9] так 1 соответствие, затем при исследовании этих 22, это останавливается в первых 2 и считает это соответствием, не смотря на остальных. Так же для 333. Если Вы указали
[0-9]{2}
это не соответствовало бы 1, но 22 соответствия и затем 33 в 333 соответствиях, таким образом, это захватывает его.
Как slm сказал, границы слова являются билетом здесь. У Вас есть и-P и-E разновидности grep regex соответствие в Вашем вопросе. Можно использовать GNU \<и \> с-E как это:
ls | xargs -n 1 basename | grep -E '\<[0-9]{1}\>'
или \b с или-E или соответствие pcre-P как это
ls | xargs -n 1 basename | grep -P '\b[0-9]{1}\b'
Эхо всегда успешно. Обойтись без него и дополнительной оболочки:
#!/bin/bash
echo "enter the directory name"
read ab
check(){
if mkdir "$ab" 2>/dev/null; then
echo "directory created "
ls -ld "$ab"
exit
else
echo "try again "
echo "enter new value for directory: "
read ab
check
fi
}
check
-121--84565- Удивлен, что это еще не включено.
Не требуется sudo
:
lsblk -f
Поместите в верхний скрипт:
shopt -s nullglob
тот путь, если в вашем случае нет mp3, как и в вашем случае (полагаю), ошибки не будет.
Если файл mp3 не соответствует подстановочному символу, оболочка принимает * .mp3
буквально.
Это происходит потому, что в каталоге нет .mp3
.
Если вы выполнили этот взгляд в каталог без .mp3
и .wav
файлы,
Вы получите 2 ошибки, один для *. MP3
и секунду для *. WAV
файлы.
Простое решение сделать эту работу даже когда .mp3
или .wav
отсутствует,
Чтобы добавить тест, если файл существует:
for a in $1*.{wav,mp3}; do
test -f "$a" || continue
ffmpeg -i "$a" -ar 44100 -ab $br "$br""_tmp/${a%.*} ["$br"].mp3"
done
, который сказал, что @SPUTNICK решение с Shopt -S Nullglob
лучше, чем это.
Вы также должны цитировать $ 1
, и вы можете упростить цитаты в строке FFMPEG
:
for a in "$1"*.{wav,mp3}; do
test -f "$a" || continue
ffmpeg -i "$a" -ar 44100 -ab $br "${br}_tmp/${a%.*} [$br].mp3"
done