Re: Подстановка переменного числа аргументов
> Здравствуйте.
> Прошу прощения за такой элементарный и не совсем тематический вопрос, но это
> наиболее компетентная группа, которую я сейчас читаю.
> Задача. В зависимости от некоторых условий необходимо вызвать команду с
> дополнительными аргументами или без них. Например:
В самых сложных и запутанных случаях помогает shquote, который ниже
и eval. Решение -- самое общее и переносимое на любой POSIX и даже
недо-POSIX шел.
shquote (){
# $1 - string to shquote
__cmd=`printf '%s\n' "$1" | sed "s|'|'\\\\\''|g"`
printf "%s\n" "'$__cmd'"
}
Пример. Есть имя файла с пробелами, кавчками одинарными и двойными.
Мы хотим с ним что-то сделать.
0 777-sample>ls -la
total 8
drwxr-xr-x 2 cheusov wheel 512 Oct 31 00:28 .
drwxrwxrwt 26 root wheel 1536 Oct 31 00:27 ..
0 777-sample>~/tmp/777.sh
0 777-sample>ls -la
total 8
drwxr-xr-x 2 cheusov wheel 512 Oct 31 00:28 .
drwxrwxrwt 26 root wheel 1536 Oct 31 00:27 ..
-rw-r--r-- 1 cheusov wheel 0 Oct 31 00:28 Alan Parson's Project.flac
-rw-r--r-- 1 cheusov wheel 0 Oct 31 00:28 And doubler quotes "" too!!!.flac
-rw-r--r-- 1 cheusov wheel 0 Oct 31 00:28 King Cromson.flac
0 777-sample>cat ~/tmp/777.sh
#!/bin/sh
shquote (){
# $1 - string to shquote
__cmd=`printf '%s\n' "$1" | sed "s|'|'\\\\\''|g"`
printf "%s\n" "'$__cmd'"
}
create_file (){
# $1 - filename
cmd="touch "`shquote "$1"`
eval "$cmd"
}
create_file "King Cromson.flac"
create_file "Alan Parson's Project.flac"
create_file 'And doubler quotes "" too!!!.flac'
0 777-sample>
С многосложными опциями ситуация та же. Просто итераций shquote больше,
по одной на каждую опцию. В баше builtin printf '%q' делает что-то похожее.
--
Best regards, Aleksey Cheusov.
Reply to: