我正在努力使用awk替换,由于某种原因,以下代码不能替代任何东西,它只是打印输出不变.谁能看到我在这里失踪的东西?任何帮助都会非常适合!(PS!$ DOCPATH和$ SITEPATH是shell变量,它们在我的awk设置中完美运行).
awk -v docpath="$DOCPATH" -v sitepath="$SITEPATH" '{ sub( /docpath/, sitepath ) } { print }'
Run Code Online (Sandbox Code Playgroud) 我有一个脚本,用户输入需要进行评估数次,该解决方案IM工作就是把评估位转换成函数,只需调用函数每次我需要评估的输入时间.问题是,当我试图更新$1
变量(引用函数的第一个变量参数)时,我收到错误消息"$ VARIABLE command not found".
这是代码:
function input_handler() {
if is_integer $1; then
selid="$1 -1"
if [[ "$1" -le "0" ]]; then
echo "Please use a simple positive number!"
else
if [[ "$1" -le "${#array[*]}" ]]; then
eval $1="${array[selid]}"
echo "Ok, moving on..."
else
echo "That number seems too large, try again?"
fi
fi
else
if [ -e $2/$1 ]; then
echo "Ok, moving on..."
else
echo "That item is not on the list, try again!"
fi
fi …
Run Code Online (Sandbox Code Playgroud) 我找到了这个很酷的Bash函数,用于检查数组是否包含一个元素:
CONTAINS_ELEMENT(){
local e
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
return 1
}
Run Code Online (Sandbox Code Playgroud)
以下是它的用法示例:
if CONTAINS_ELEMENT $element "${array[@]}"; then
...
fi
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有办法重写这个函数,以便它可以检查数组中的任何值是否等于其他数组的任何值,而不只是检查一个单独的值,因为它正确吗?
我正在尝试在 bash 脚本中实现一个中止函数,目前它看起来像这样:
function abort {
LOGFILE=/var/log/bash_test
DATE=$(date "+%Y %b %a %H:%M:%S")
printf "\n------| ERROR: %s line %03d in %s |------\n" "$DATE" "$2" "${0}" >> "$LOGFILE"
echo "$1" >> "$LOGFILE"
}
abort "Some kind of error..." $LINENO
Run Code Online (Sandbox Code Playgroud)
这将在 /var/log/bash_test 中产生
------| ERROR: 2014 Jan Tue 12:50:12 line 007 in /home/user/test.sh |------
Some kind of error
Run Code Online (Sandbox Code Playgroud)
我的问题是:手动给出行号的方法(例如 $2 < $LINENO)既丑陋又重复。有没有办法让这个函数自动从函数外部检测 $LINENO ?这样我就可以发出命令
abort "Some kind of error..."
Run Code Online (Sandbox Code Playgroud)
仍然得到行号?