Questions tagged «quoting»

字符串通常用引号分隔,这引起了处理包含引号的字符串的问题。


1
bashrc惰性替换
如何在运行时而不是在执行〜/ .bashrc时(打开终端时)获得~/.bashrc别名来评估$()替换? 我经常运行此命令,以便为其添加别名: svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff 但是,当我将其添加~/.bashrc为别名时,我看到评估被硬编码为它们在打开终端时所具有的值: $ alias alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff' 如果我在其中打开终端,~则会收到错误消息: svn: E155007: '/home/dotancohen' is not a working copy svn: E155007: '/home/dotancohen' is …
10 bash  shell  quoting  alias  bashrc 

1
了解IFS的默认值
在我的GNU bash版本4.2.8中,IFS默认具有空格,制表符和换行符的默认值: usr@T42 ~ $ echo -n "$IFS" | hexdump -C 00000000 20 09 0a | ..| 00000003 usr@T42 ~ $ 有没有使用默认IFS的理由?另外,除了bash内置之外,哪些实用程序还使用IFS read?
10 bash  shell  quoting 

2
传递参数以保持原样
我有以下功能: bar() { echo $1:$2; } 我正在从另一个函数调用此函数foo。foo本身称为: foo "This is" a test 我想得到以下输出: This is:a 也就是说,bar接收到的参数应该与我传递给的参数相同foo。 foo为了实现这一目标需要如何实施?我已经尝试了以下两个实现,但是都没有用: foo() { bar $*; } –输出: this:is foo() { bar "$*"; } –输出: this is a test: 我的问题实际上是如何保留引号。这有可能吗?

1
包装包含另一个命令的单引号和双引号的命令
我最近了解了watch,但是在使其使用相对复杂的命令时遇到了麻烦。 例如,我想要求每三秒钟watch运行zsh一次以下命令*: for x in `command_1 | grep keyword | cut -d' ' -f1`; do command_2 "word[word=number]" $x; done 如您所见,以上行包括单引号,双引号以及其他特殊字符。 所以我尝试了: watch -n 3 "for x in `my_command | grep keyword | cut -d' ' -f1`; do command2 "rusage[mem=7000]" $x; done" 但后来我得到了: 在!@#$#....中找不到x的匹配项;做完了 我尝试了其他组合,但没有成功。这是这些尝试之一: watch -n 3 "for x in …
10 shell  zsh  quoting 



4
shell脚本是否可以打印其引号,就像您在shell提示符下编写引号一样?
在shell脚本中,我的理解是"$@"扩展到脚本参数,并根据需要引用它们。例如,这会将脚本参数转发给gcc: gcc -fPIC "$@" 但是,当使用bash传递到stdin的语法时<<<,"@$"却无法正常运行。 #!/bin/bash cat <<< "$@" 调用脚本./test.sh foo "bar baz"给 foo bar baz 我希望 foo "bar baz" 有没有一种方法可以像在shell提示符下那样编写可打印其参数的shell脚本?例如:关于下一步要使用的命令的提示,包括提示中的脚本参数。

2
bash中单引号$'string'和双引号$“ string”有什么区别?
我试图使用执行新行,echo并尝试了以下两个命令: 第一条命令: echo $'Hello World\nThis is a new line' 响应: Hello World This is a new line 第二条命令: echo $"Hello World\nThis is a new line" 响应: Hello World\nThis is a new line 我的问题是什么是用包裹串之间的区别$' '与包裹VS字符串$" "中bash的echo?
9 bash  quoting  echo 


1
\ time,t / ime和cd实际做什么?(在外壳中加反斜杠的乐趣)
在讨论/usr/bin/time与内置shell(bash和zsh)之间的区别时time,有人提到一个人可以\time用作get的简写/usr/bin/time。 首先,它似乎是一个不错的无害捷径,但随后出现了一些问题: 为什么也可以t\ime工作? 为什么\cd即使/usr/bin/cd¹都没有更改目录? 显然,\foo这不等于$(which foo)。现在的问题是: \fooshell的POSIX定义是否以任何方式涵盖了bash和zsh中观察到的行为?如果是,为什么它表现得如此? 脚注1:/usr/bin/cd在我的系统上, #!/bin/sh builtin cd "$@"

3
bash变量中的新行
我正在尝试在bash变量中存储多行,但是它似乎不起作用。 例如,如果我/bin每行列出一个文件并将其存储在中$LS,那么我$LS将以stdin的形式传递给wc,则该文件始终返回1: $ ls -1 /bin | wc -l 134 $ LS=$(ls -1 /bin); wc -l <<< $LS 1 如果尝试输出到屏幕,则会得到各种结果:将echo所有行打印在一行上,而printf仅打印第一行: #!/bin/bash LS=$(ls -1 /bin) echo $LS printf $LS 那么,bash变量可以包含多行吗?
9 bash  shell  quoting 

2
我如何有条件地将子壳传递给“时间”?
我有一个Vagrant框的设置脚本,该脚本过去曾用来测量单个步骤time。现在,我想有条件地启用或禁用时间测量。 例如,以前的一行如下所示: time (apt-get update > /tmp/last.log 2>&1) 现在我以为我可以做这样的事情: MEASURE_TIME=true [[ $MEASURE_TIME = true ]] && TIME="time --format=%e" || TIME="" $TIME (apt-get update > /tmp/last.log 2>&1) 但这不起作用: syntax error near unexpected token `apt-get' `$TIME (apt-get update > /tmp/last.log 2>&1)' 这是什么问题
9 bash  shell  quoting  time 



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.