这是我的问题.在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这个例子中调用的变量的构造.
我是Ubuntu的新手我尝试打开一个文件名,里面有空格我用cd命令显示bash:cd:参数太多了
每当文件名中有空格时.它显示此错误我该怎么办?提前致谢
我用谷歌搜索并尝试了很多东西,从来没有任何东西可以使用$ {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的非常模糊的特征.我已经从这篇文章中省略了大约半个小时的尝试,每个人都比以前更加扭曲!
我正在考虑使大型代码库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",除非紧接在引号前面或后面,但无法检测到我们是否在字符串中更深.
我正在尝试为我的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上使用它们.
任何建议将不胜感激.谢谢!
是否有任何vscode的快捷方式或扩展名可以帮助删除所选文本周围的包围引号(单个"或双")?
请参阅下面的示例
'hello' ==> hello
换句话说,是否有可能在引号和引号之间切换当前选择的功能?
我试过vscode的es引用,这在单引号和双引号之间切换引号时非常好.
有人可以清楚地列出Julia中可用于元编程的各种引用机制,并以最小的例子说明每一个吗?
因此很清楚在哪种情况下使用哪种...
据我所知,有:
:(someExpr; maybeMore)quote; ...expressions... end; 这与上面几乎相同,仅用于调试目的的行号Expr(:quote, x)其中(根据@totalverb)相当于Meta.quot(x)这份清单是否全面?我错过了任何其他陈述吗?
如何将带空格的字符串传递给一个命令,该命令返回一个带空格的字符串?
我尝试了以下四个版本.
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|
我找不到使用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.原则上,第一个实际产生\',这是我一直在寻找的.也许翻倍的景观会有所帮助吗?
我正在尝试通过批处理文件下载 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 参数的外部引号的情况下将 & 符号括在引号中?
quoting ×10
bash ×6
arguments ×1
batch-file ×1
cd ×1
escaping ×1
javascript ×1
julia ×1
linux ×1
perl6 ×1
powershell ×1
quotes ×1
spaces ×1
ssh ×1
string ×1