Macos 在shell脚本中的变量中转义双引号

Macos 在shell脚本中的变量中转义双引号,macos,shell,unix,terminal,Macos,Shell,Unix,Terminal,希望是一个简单的问题,也是我谜题的最后一部分…:-)我在OSX下的终端上运行了一个shell脚本。其中包括: name=$(basename "$file") printf "%s" "\"$name\";" 。。。这很好。。。但是假设文件名包含一个双引号-IMA“G09%”27.jpg-那么输出将是: “IMA”G09%'27.jpg 。。。这将“打破”我打算稍后放入db的行(双引号)。所以我需要逃避它,这样我才能得到输出: “IMA\”G09%'27.jpg;" …但我不知道如何…任何人?

希望是一个简单的问题,也是我谜题的最后一部分…:-)我在OSX下的终端上运行了一个shell脚本。其中包括:

name=$(basename "$file")
printf "%s" "\"$name\";"
。。。这很好。。。但是假设文件名包含一个双引号-IMA“G09%”27.jpg-那么输出将是:

“IMA”G09%'27.jpg

。。。这将“打破”我打算稍后放入db的行(双引号)。所以我需要逃避它,这样我才能得到输出:

“IMA\”G09%'27.jpg;"

…但我不知道如何…任何人?:-)

编辑-结果:在anubhava的帮助下,这是我使用的(用于获取文件信息,包括类型/创建者):


printf
%q
一起使用:

name='file"naeme.txt'

printf "\"%q;\"" "$name"
"file\"naeme.txt;"

下面是另一种方法,使用
sed
控制转义:

printquoted() {
    printf '"%s";' "$(LC_ALL=C sed 's/["]/\\&/g' <<<"$1")"
}

printquoted "$name"
printquoted "$full_path"
printquoted "$extension"
...etc
printquoted(){

printf“%s”;“$(LC_ALL=C sed's/[“]/\\\&/g”将printf“%s”\“$name\”;”更改为printf“%s\%q;”“\”“\“$name\”;”…但仍然得到相同的输出,即“file”name.txt;”…因为我将其与“%s”组合在一起?但我需要它,否则名称包含%的文件将被跳过。您需要在问题中提供更多示例,说明
%q
对您不起作用。嗯,您是对的,使用%…但是…我需要在整个字符串周围加上双引号,这些字符串现在也被转义:printf“\%q;”“\$name\”给我“\”IMA\”G09%\'27.jpg\”;啊,但是我可以分三步来做printf,当然!谢谢,明白了-稍后会发布最终结果:-)谢谢你的帮助!!:-)试试这个命令:
s=“IMA\”G09%'27.jpg“&&printf”\%q;“$s”
。它给了我:
“IMA\”G09%\'27.jpg;
,正如你所看到的,外部引号是不带的。
printquoted() {
    printf '"%s";' "$(LC_ALL=C sed 's/["]/\\&/g' <<<"$1")"
}

printquoted "$name"
printquoted "$full_path"
printquoted "$extension"
...etc