当我读到本书 linux shell scripting cookbook 时
他们说当你想要打印!
时,你不应该用双引号,或者你可以在\
之前添加!
来逃避它。
例如
$echo "Hello,world!"
$echo "Hello,world\\!"
但在我的情况下(ubuntu14.04),我得到了这样的答案:
$echo "Hello,world!"
$echo "Hello,world\\!"
那么,为什么我的机器无法得到相同的答案?
为什么将转义符号\
打印为普通符号?
答案 0 :(得分:2)
当您以交互方式键入shell时,!
具有特殊含义,它是history expansion character。为了防止这种特殊含义,您需要将其放在单引号中或将其转义。
echo 'Hello, world!'
echo "Hello, world\!'
它在Ubuntu上没有发生的原因可能是因为它正在运行bash
的更新版本,这显然对历史扩展何时更具选择性。似乎需要!
后面跟着字母数字,而不是标点符号。
您不需要在脚本中执行此操作,因为通常不会在此处启用历史记录。它只适用于交互式shell。
答案 1 :(得分:0)
创建一个名为file.sh的shell脚本:
#!/bin/bash
# file.sh: a sample shell script to demonstrate the concept of Bash shell functions
# define usage function
usage(){
echo "Usage: $0 filename"
exit 1
}
# define is_file_exits function
# $f -> store argument passed to the script
is_file_exits(){
local f="$1"
[[ -f "$f" ]] && return 0 || return 1
}
# invoke usage
# call usage() function if filename not supplied
[[ $# -eq 0 ]] && usage
# Invoke is_file_exits
if ( is_file_exits "$1" )
then
echo "File found"
else
echo "File not found"
fi
按以下方式运行:
chmod +x file.sh
./file.sh
./file.sh /etc/resolv.conf