Как я могу преобразовать строку, содержащую символы шарика такой как
/var/lib/gems/*/bin
в разделенную от двоеточия строку имен файлов (т.е. совместимый Путь) соответствие шаблону?
т.е. echo /var/lib/gems/*/bin
возвратится
/var/lib/gems/1.8/bin /var/lib/gems/1.9.1/bin
Я хочу
/var/lib/gems/1.8/bin:/var/lib/gems/1.9.1/bin
вместо этого.
Очевидный подход должен просто заменить пробел ':' через tr
, но это не работает, если само имя файла содержит пробел.
На самом деле, я придумал лучшее решение: использовать функцию оболочки.
function join() {
local IFS=$1
shift
echo "$*"
}
mystring=$(join ':' /var/lib/gems/*/bin)
Это должно сделать это для вас:
dirs=(/var/lib/gems/*/bin) # put filenames (dirnames) in an array
saveIFS=$IFS IFS=':' # set the Internal Field Separator to the desired delimiter
dirs=("${dirs[*]}") # convert the array to a scalar with the new delimiter
IFS=$saveIFS # restore IFS
Это довольно тривиально, если вы зайдете в Perl:
perl -e 'print join ":", @ARGV' /var/lib/gems/*/bin
или Python:
python -c 'import sys; print ":".join(sys.argv[1:])' /var/lib/gems/*/bin
или любое количество других популярных языков сценариев.