比方说,你有一个alias像bash 一样:
alias rxvt='urxvt'
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.
然而:
alias rxvt='urxvt -fg '#111111' -bg '#111111''
Run Code Online (Sandbox Code Playgroud)
不会起作用,也不会:
alias rxvt='urxvt -fg \'#111111\' -bg \'#111111\''
Run Code Online (Sandbox Code Playgroud)
那么,一旦转义了引号,你最终如何在字符串中匹配开头和结尾的引号?
alias rxvt='urxvt -fg'\''#111111'\'' -bg '\''#111111'\''
Run Code Online (Sandbox Code Playgroud)
看起来很笨拙虽然如果你允许这样连接它们就会代表相同的字符串.
我想从一个bash shell脚本运行一个命令,该脚本在单引号和变量中有单引号和一些其他命令.
例如 repo forall -c '....$variable'
在此格式中,$进行转义并且不扩展变量.
我尝试了以下变化,但他们被拒绝了:
repo forall -c '...."$variable" '
repo forall -c " '....$variable' "
" repo forall -c '....$variable' "
repo forall -c "'" ....$variable "'"
Run Code Online (Sandbox Code Playgroud)
如果我用值代替变量来执行命令就好了.
请告诉我哪里出错了.
任何人都可以告诉我如何在bash中的双字符串中避免双引号?
例如在我的shell脚本中
#!/bin/bash
dbload="load data local infile \"'gfpoint.csv'\" into table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY \"'\n'\" IGNORE 1 LINES"
Run Code Online (Sandbox Code Playgroud)
我无法\"正确使用双引号转义来获取ENCLOSED BY .我不能对我的变量使用单引号,因为我想使用变量$dbtable.
有人能告诉我是否应该在shell脚本中包含变量的引号?
例如,以下是正确的:
xdg-open $URL
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)
要么
xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
在Windows XP上运行的MySQL 5.1.31.
从本地 MySQL服务器(192.168.233.142)我可以以root身份连接如下:
>mysql --host=192.168.233.142 --user=root --password=redacted
Run Code Online (Sandbox Code Playgroud)
从远程计算机(192.168.233.163),我可以看到mysql端口是打开的:
# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).
Run Code Online (Sandbox Code Playgroud)
但是当我尝试从远程计算机连接到mysql时,我会收到:
# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)
Run Code Online (Sandbox Code Playgroud)
我在mysql.user中只有2个条目:
Host User Password
--------------------------------------
localhost root *blahblahblah
% root [same as above]
Run Code Online (Sandbox Code Playgroud)
我还需要做些什么来启用远程访问?
编辑
正如下面的Paulo所建议的,我尝试用特定于IP的条目替换%的mysql.user条目,因此我的用户表现在看起来像这样:
Host User Password
------------------------------------------
localhost root *blahblahblah
192.168.233.163 root [same as above]
Run Code Online (Sandbox Code Playgroud)
然后我重新启动了机器,但问题仍然存在.
这可能是一个非常基本的问题,但由于某种原因,我似乎看起来很明显.
我有一个名为的变量 filepath=/tmp/name
要访问变量,我知道我可以这样做 $filepath
在我的shell脚本中,我试图做这样的事情(后面的刻度是有意的)
`tail -1 $filepath_newstap.sh`
Run Code Online (Sandbox Code Playgroud)
这行失败了,duuh!因为没有调用变量$filepath_newstap.sh
如何附加_newstap.sh到变量名称?请注意,后面的刻度表用于表达式评估
我在bash脚本中尝试了以下各种形式:
#!/bin/bash
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Run Code Online (Sandbox Code Playgroud)
但我无法获得正确扩展COLUMNS环境变量的语法.
我尝试了以下各种形式:
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W $COLUMNS'
Run Code Online (Sandbox Code Playgroud)
和
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W ${COLUMNS}'
Run Code Online (Sandbox Code Playgroud)
和
eval svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Run Code Online (Sandbox Code Playgroud)
建议?
我使用下面的代码替换shell脚本中的字符串.
echo $LINE | sed -e 's/12345678/"$replace"/g'
Run Code Online (Sandbox Code Playgroud)
但它正在被替换$replace而不是该变量的值.
谁有人说出了什么问题?
我有一个Bash脚本,我想在传递的参数中保留引号.
例:
./test.sh this is "some test"
Run Code Online (Sandbox Code Playgroud)
然后我想使用这些参数,并重用它们,包括整个参数列表的引号和引号.
我尝试使用\"$@\",但删除了列表中的引号.
我该如何做到这一点?
我经常忘记运行命令sudo.我正在寻找一种方法来制作一个bash函数(或别名)来重复最后一个命令sudo.就像是:
S() {
sudo $(history 1)
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?