标签: quoting

将字符串转换为参数时,Bash不解析引号

这是我的问题.在bash 3中:

$ test='One "This is two" Three'
$ set -- $test
$ echo $2
"This
Run Code Online (Sandbox Code Playgroud)

如何获得的bash了解行情,并返回$ 2作为This is two和不"This?不幸的是,我不能改变test这个例子中调用的变量的构造.

string bash arguments spaces quoting

11
推荐指数
2
解决办法
2981
查看次数

bash:cd:参数太多了

我是Ubuntu的新手我尝试打开一个文件名,里面有空格我用cd命令显示bash:cd:参数太多了

每当文件名中有空格时.它显示此错误我该怎么办?提前致谢

bash cd quoting

11
推荐指数
1
解决办法
4万
查看次数

Bash:如何使用运算符参数扩展$ {parameter @ operator}?

我用谷歌搜索并尝试了很多东西,从来没有任何东西可以使用$ {parameter @ operator}.我找到的只是更多链接到相同的文档.因此,我认为通过实际例子得到正确答案对其理解非常有帮助.

文件说:

$ {参数@操作}

扩展可以是参数值的变换,也可以是参数本身的信息,具体取决于运算符的值.每个运营商都是一个字母:

Q
扩展是一个字符串,它是以可以重复用作输入的格式引用的参数值.

它还说引用:

3.1.2引用
引用用于删除shell中某些字符或单词的特殊含义.

所以我的理由是这个(特殊字符$)的输出:

a="To be reused as an input string, \$0 needs to be quoted"
echo ${a@Q}
Run Code Online (Sandbox Code Playgroud)

应该是这个(在""之间,'\'被删除,所以需要再次引用作为输入):

To be reused as an input string, \$0 needs to be quoted
Run Code Online (Sandbox Code Playgroud)

但我得到:

bash: ${a@Q}: bad substitution
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的组合:

${a@q}, "${a@Q}", a='To be reused as an input string, $0 needs to be quoted'
Run Code Online (Sandbox Code Playgroud)

无济于事.

实际上,我尝试使用的任何运算符总是会产生错误的替换错误.这些似乎是bash的非常模糊的特征.我已经从这篇文章中省略了大约半个小时的尝试,每个人都比以前更加扭曲!

bash quoting operator-keyword parameter-expansion

9
推荐指数
2
解决办法
1172
查看次数

使用适当的引用自动重写bash脚本的工具?

我正在考虑使大型代码库shellcheck的所有bash脚本兼容,但任务是压倒性的,因为过多的开发人员历来忽略所有shell脚本的第一个规则:始终使用引号.

如果有一个工具可以至少修复报价,那将会很有帮助.然后,我可以手动修复其余部分.我正则表达式并没有削减它,因为只有变量不是已经在一个字符串必须加引号.

样本输入:

echo "Removing $a ${b} $(c $(c)) `d $d` ${10} $@ now"
rm -rf $a ${b} $(c $(c)) `d $d` ${10} $@
Run Code Online (Sandbox Code Playgroud)

样本输出:

echo "Removing $a $b $(c "$(c)") `d "$d"` ${10} $@ now"
rm -rf "$a" "$b" "$(c "$(c)")" "$(d "$d")" "${10}" "$@"
Run Code Online (Sandbox Code Playgroud)

它不需要修复上述所有内容,它甚至不必完美无瑕(虽然这将是非常好的),但它必须是正确的,而不是没有用.


这是我天真的正则表达式没有削减它:

s:([^"])\$\{([_A-Za-z0-9]+)\}([^"]|$):\1"\$\2"\3:g
Run Code Online (Sandbox Code Playgroud)

它将$ {identifier}转换为"$ identifier",除非紧接在引号前面或后面,但无法检测到我们是否在字符串中更深.

bash static-analysis quoting

9
推荐指数
2
解决办法
1566
查看次数

使用SSH时转义引号

我正在尝试为我的PHP应用程序构建一个简单的部署脚本.我知道这项工作有多种工具(Capistrano,Phing等),但对于我的简单部署例程,它们看起来很多.

我使用sshpass来避免一遍又一遍地输入我的密码.但在上传我的压缩安装程序后,我需要ssh到服务器并运行一些命令.其中一个是sed.所以,引用打破了我的脚本.它是这样的:

sshpass -p foo ssh user@host "
   cd /www/htdocs/foo/bar 
   echo 'Untar and remove installer'
   tar -zxf install.tar.gz

   sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');" index.php > tmp && mv tmp index.php
   sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');/" admin/index.php > tmp && mv tmp admin/index.php

"

如您所见,我使用双引号来启动我的SSH语句,但我还需要在sed上使用它们.

任何建议将不胜感激.谢谢!

linux ssh bash quoting

8
推荐指数
1
解决办法
1万
查看次数

删除vscode中包含的引号或在引号和引号之间切换

是否有任何vscode的快捷方式或扩展名可以帮助删除所选文本周围的包围引号(单个"或双")?
请参阅下面的示例

'hello' ==> hello

换句话说,是否有可能在引号和引号之间切换当前选择的功能?

我试过vscode的es引用,这在单引号和双引号之间切换引号时非常好.

javascript quotes quoting visual-studio-code

8
推荐指数
2
解决办法
6629
查看次数

消除Julia元编程中的各种引用机制的歧义

有人可以清楚地列出Julia中可用于元编程的各种引用机制,并以最小的例子说明每一个吗?

因此很清楚在哪种情况下使用哪种...

据我所知,有:

  • :(someExpr; maybeMore)
  • quote; ...expressions... end; 这与上面几乎相同,仅用于调试目的的行号
  • Expr(:quote, x)其中(根据@totalverb)相当于Meta.quot(x)
  • QuoteNode(根据Jeff Bezanson所说)"仅用于内部AST表示,而不是宏.除非你在编译器的后期工作,否则可以安全地忽略."

这份清单是否全面?我错过了任何其他陈述吗?

metaprogramming quoting julia

8
推荐指数
1
解决办法
309
查看次数

如何正确引用嵌套的子shell参数?

如何将带空格的字符串传递给一个命令,该命令返回一个带空格的字符串?

我尝试了以下四个版本.

arg='one arg'

arg() { echo "arg: $1"; }

printf '1 |%s|\n' $(arg "$arg")
printf '2 |%s|\n' "$(arg $arg)"
printf '3 |%s|\n' "$(arg \"$arg\")"
printf '4 |%s|\n' "$(arg '$arg')"
Run Code Online (Sandbox Code Playgroud)

他们都失败了:

1 |arg:|
1 |one|
1 |arg|
2 |arg: one|
3 |arg: "one|
4 |arg: $arg|

如何得到这个结果?

? |arg: one arg|

bash quoting

8
推荐指数
1
解决办法
426
查看次数

使用trans翻译单引号

我找不到使用trans单引号转换为转义单引号的方法:

say ($ = "'well done'").=trans("'" => "\\\'" ) ;# OUTPUT: «\well done\?»
say ($ = "'well done'").=trans(<'> => Q [\'] ) ;# OUTPUT: «\well done\?»
say ($ = "'well done'").=trans("'" => q"\\\'" );# OUTPUT: «\well done\?»
Run Code Online (Sandbox Code Playgroud)

可能有使用拆分或任何其他东西的解决方法,包括subst.原则上,第一个实际产生\',这是我一直在寻找的.也许翻倍的景观会有所帮助吗?

escaping quoting perl6

7
推荐指数
1
解决办法
98
查看次数

如何在批处理文件的 powershell 命令中包含与号?

我正在尝试通过批处理文件下载 Google 表格。这有效:

powershell -Command "Invoke-WebRequest https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/export?exportFormat=tsv -OutFile output.tsv"
Run Code Online (Sandbox Code Playgroud)

当我通过添加 &gid=1234 指定我想要的工作表/标签时,这会中断:

powershell -Command "Invoke-WebRequest https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/export?exportFormat=tsv&gid=1234 -OutFile output.tsv"
Run Code Online (Sandbox Code Playgroud)

错误是:

不允许使用与号 (&) 字符。& 运算符保留供将来使用;用双引号 ("&") 包裹一个 & 符号以将其作为字符串的一部分传递。

如何在不破坏 Command 参数的外部引号的情况下将 & 符号括在引号中?

powershell batch-file quoting google-sheets

7
推荐指数
1
解决办法
1万
查看次数